chris_mtp Posté(e) le 19 octobre 2009 Posté(e) le 19 octobre 2009 Bonjour à tous, J'ai une polyligne 2D constitué de segments droits et d'arc.Comment puis je faire pour créer une liste de points avec les centre des arcs qui composent la polyligne ?Ma polyligne est fermée.Merci par avance de votre aide. John. [Edité le 19/10/2009 par chris_mtp]
zebulon_ Posté(e) le 19 octobre 2009 Posté(e) le 19 octobre 2009 (defun getPolySegs (ent / entl p1 pt bulge seg ptlst) (cond (ent (setq entl (entget ent)) ;; save start point if polyline is closed (if (= (logand (cdr (assoc 70 entl)) 1) 1) (setq p1 (cdr (assoc 10 entl))) ) ;; run thru entity list to collect list of segments (while (setq entl (member (assoc 10 entl) entl)) ;; if segment then add to list (if (and pt bulge) (setq seg (list pt bulge)) ) ;; save next point and bulge (setq pt (cdr (assoc 10 entl)) bulge (cdr (assoc 42 entl)) ) ;; if segment is build then add last point to segment ;; and add segment to list (if seg (setq seg (append seg (list pt)) ptlst (cons seg ptlst)) ) ;; reduce list and clear temporary segment (setq entl (cdr entl) seg nil ) ) ) ) ;; if polyline is closed then add closing segment to list (if p1 (setq ptlst (cons (list pt bulge p1) ptlst))) ;; reverse and return list of segments (reverse ptlst) ) (defun getArcInfo (segment / a p1 bulge p2 c p3 p4 p r s result) ;; assigner variables avec les valeurs de l'argument (mapcar 'set '(p1 bulge p2) segment) (if (not (zerop bulge)) (progn ;; trouver la corde (setq c (distance p1 p2)) ;; trouver la flèche (setq s (* (/ c 2.0) (abs bulge))) ;; trouver le rayon par Pythagore (setq r (/ (+ (expt s 2.0) (expt (/ c 2.0) 2.0)) (* 2.0 s))) ;; distance au centre (setq a (- r s)) ;; coordonnées du milieu de p1 et P2 (setq P4 (polar P1 (angle P1 P2) (/ c 2.0))) ;; coordonnées du centre (setq p (if (>= bulge 0) (polar p4 (+ (angle p1 p2) (/ pi 2.0)) a) (polar p4 (- (angle p1 p2) (/ pi 2.0)) a) ) ) ;; coordonnées de P3 (setq p3 (if (>= bulge 0) (polar p4 (- (angle p1 p2) (/ pi 2.0)) s) (polar p4 (+ (angle p1 p2) (/ pi 2.0)) s) ) ) (setq result (list p r)) ) (setq result nil) ) result ) (defun c:PolyCen () (setq e (car (entsel))) (if e (progn (setvar "CMDECHO" 0) (command "_undo" "_begin") (setq lseg (GetPolySegs e)) (setq I 0) (repeat (length lseg) (setq seg (nth I lseg)) (setq I (+ I 1)) (if (not (zerop (cadr seg))) ;; bulge non nul (command "_point" "_non" (trans (car (getarcinfo seg)) 0 1)) ) ) (command "_undo" "_end") ) ) (princ) ) Avec les routines getarcinfo et getpolysegs issues de Afralisp AmicalementVincent [Edité le 19/10/2009 par zebulon_] C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
(gile) Posté(e) le 19 octobre 2009 Posté(e) le 19 octobre 2009 Salut, zebulon_ a (brillament) répondu. Je rappelle juste une petite routine qui retourne les données d'un arc de polyligne.La routine requiert 3 arguments :- la courbure ou bulge (groupe dxf 42 des polylignes)- le point de départ du segment- le point de fin du segmentElle retourne une liste contenant :- l'angle de l'arc- le rayon de l'arc- le centre de l'arc ;; BulgeData Retourne les données d'un polyarc (angle rayon centre) (defun BulgeData (bu p1 p2 / ang rad) (setq ang (* 2 (atan bu)) rad (/ (distance p1 p2) (* 2 (sin ang)) ) cen (polar p1 (+ (angle p1 p2) (- (/ pi 2) ang)) rad ) ) (list (* ang 2.0) rad cen) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 19 octobre 2009 Posté(e) le 19 octobre 2009 tout ce que je connais des bulges, je l'ai appris ici Bulges are something that women have (mostly to please the opposite sex it seems) and something that guys try to get by placing socks in strategic places. At least until they get older. Which is the time they tend to develop bulges in not so strategic places. In other words: bulges are all about curvature.In AutoCAD, bulges are used in shapes and in arc segments of polylines. This article only deals with polyline bulges, and because polyline bulges are describing circular arcs, let's first look at the geometry of a circular arc. Personnellement, j'en suis à développer des courbes à des endroits non stratégiques... ;) Dommage que le site AfraLisp ne s'affiche bien qu'avec Intenet Explorer et pas avec FireFox (en tout cas chez moi) AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
bonuscad Posté(e) le 19 octobre 2009 Posté(e) le 19 octobre 2009 Dommage que le site AfraLisp ne s'affiche bien qu'avec Intenet Explorer et pas avec FireFox (en tout cas chez moi) Tu n'es pas le seul...Soit je mets en surbrillance de sélection pour pourvoir lire. Ou autre possibilité, dans les options de firefox, onglet "contenu", bouton "couleur":Décocher "Permettre aux pages de choisir leurs propres couleurs au lieu de celles choisies ci-dessus" Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Tramber Posté(e) le 19 octobre 2009 Posté(e) le 19 octobre 2009 Utilisez donc Opera les gars ! Comme ça vous saurez sur qui Firefox a triché à l'époque ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
chris_mtp Posté(e) le 19 octobre 2009 Auteur Posté(e) le 19 octobre 2009 Merci Zebulon pour ton aide.J'ai pu faire ma liste comme je voulais en modifiant un peu ton code. John.
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant