Titifonky Posté(e) le 2 mars 2005 Posté(e) le 2 mars 2005 Salut, J'aimerais bien savoir comment retrouver le centre d'un arc contenu dans une LWPOLYLINEJ'ai regardé la définition d'une LWPOLYLINE, on trouve les sommets (10) mais aucune donnée tel que le centre ou le rayon quand elle contient des arc. Et à quoi correspond l'indice (42), j'ai regardé dans l'aide et je trouve Courbure de la ligne. Comment est exprimé cette courbure? :casstet: Merci www.le-metal.net, sur la métallerie
BIM G CO Posté(e) le 2 mars 2005 Posté(e) le 2 mars 2005 les angle sontt souvent exprimé en radians ...à voir... Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
bonuscad Posté(e) le 2 mars 2005 Posté(e) le 2 mars 2005 Salut, Je remet le couvert sur ce FIL Après les observations qui m'ont été faites je commente le code !Ca permettra peut être de comprendre l'autre fil. Donc voici le code reprenant une partie de l'autre code proposé sur l'autre sujet ;sous-fonction à 3 arguments ;ls => liste de points '((x y) (x y)...) ou '((x y z) (x y z) ....) ;lb => liste de réels (réel1 réel2 ...) ;flag_closed => entier bit de fermeture 0 ouvert, 1 fermé ; (defun def_bub_pl (ls lb flag_closed / ls lb rad a l_new) (textscr) ; ;si polyligne fermée on rajoute à la liste le dernier sommet (if (not (zerop flag_closed)) (setq ls (append ls (list (car ls))))) ; ;tant qu'il existe un second élément dans liste on boucle (while (cadr ls) ; ;si arrondi 0.0 donc segment droit, autrement c'est un arc (if (zerop (car lb)) (progn (princ "\nSommet :") (princ (car ls)) ) (progn ; ;calcul trigo du rayon et de l'angle au centre (setq rad (/ (distance (car ls) (cadr ls)) (sin (* 2.0 (atan (abs (car lb))))) 2.0) a (- (/ pi 2.0) (- pi (* 2.0 (atan (abs (car lb)))))) ) ;si angle négatif on prend le complémentaire à 2PI (if (< a 0.0) (setq a (- (* 2.0 pi) a))) (princ (strcat "\n Rayon : " (rtos rad))) (princ "\tPoint centre : ") ; ;si arrondi négatif => horaire, autrement => trigo (if (or (and (< (car lb) 0.0) (> (car lb) -1.0)) (> (car lb) 1.0)) (princ (polar (car ls) (- (angle (car ls) (cadr ls)) a) rad)) (princ (polar (car ls) (+ (angle (car ls) (cadr ls)) a) rad)) ) ) ) ; ;décrémente la liste des sommets et des arrondis (setq ls (cdr ls) lb (cdr lb)) ) ) ; ;Fonction principale info_arc_poly ;retourne la valeur du rayon et du centre de l'arc de la polyligne selectionnée, si celle-ci en posède ; (defun c:INFO_ARC_POLY ( / ent dxf_ent typ_ent closed l_bub e_next) ; ;boucle tant que rien n'est sélectionné ou n'est pas une polyligne (while (not (or (eq typ_ent "LWPOLYLINE") (eq typ_ent "POLYLINE"))) (while (null (setq ent (entsel "\nChoisir une polyligne: ")))) (setq typ_ent (cdr (assoc 0 (setq dxf_ent (entget (car ent)))))) (if (not (or (eq typ_ent "LWPOLYLINE") (eq typ_ent "POLYLINE"))) (princ "\nCe n'est pas une polyligne!") ) ) ; ;traite les 2 types de polyligne ;closed => est à 1 si polyligne fermée ;lst => liste des sommets :l_bub => liste des valeurs des arrondis (cond ((eq typ_ent "LWPOLYLINE") (setq closed (boole 1 (cdr (assoc 70 dxf_ent)) 1) lst (mapcar '(lambda (x) (trans x (car ent) 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent))) l_bub (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_ent)) ) ) ((eq typ_ent "POLYLINE") (setq closed (boole 1 (cdr (assoc 70 dxf_ent)) 1) e_next (entnext (car ent)) ) (while (= "VERTEX" (cdr (assoc 0 (setq dxf_next (entget e_next))))) ; ;pour accepter seulement les définition de point de polyligne 3D ;refuse les sommets inseré par le lissage ou spline et les maillages (if (zerop (boole 1 223 (cdr (assoc 70 dxf_next)))) (setq lst (cons (trans (cdr (assoc 10 dxf_next)) (car ent) 1) lst) l_bub (cons (cdr (assoc 42 dxf_next)) l_bub) ) ) (setq e_next (entnext e_next)) ) (setq lst (reverse lst) l_bub (reverse l_bub) ) ) ) ; ;appel de la sous fonction def_bub avec arguments requis (def_bub_pl lst l_bub closed) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Titifonky Posté(e) le 2 mars 2005 Auteur Posté(e) le 2 mars 2005 Salut, J'ai cherché encore sur l'aide et je suis tombé sur une phrase interessante qui dit: "Code 42: Courbure (facultatif ; valeur par défaut 0). La courbure est la tangente d'un quart de l'angle inclus dans un segment d'arc, rendu négatif si l'arc est dans le sens horaire, du point de départ au point final. Une courbure de 0 désigne un segment droit et une courbure de 1 désigne un demi-cercle" Traduction :Pour connaitre l'angle au centre de l'arc en radian il faut faire (* (atan (courbure)) 4) et on obtient l'angle de l'arc en radiant. Avec ça on peut tout faire. [Edité le 2/3/2005 par Titifonky] www.le-metal.net, sur la métallerie
Tramber Posté(e) le 14 mars 2005 Posté(e) le 14 mars 2005 J'ai commencé à me servie de SetBulge et Getbulge, Bulge étant la traduction anglaise de courbure., dans les fonctions VL. A recommander car finalement tellement + facile que d'exploiter le code DXF Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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