blnd Posté(e) le 20 juin 2019 Posté(e) le 20 juin 2019 Bonjour à tous, Je viens ici en désespoir de cause et m'excuse par avance si le sujet a déjà été traité autre part ! Je cherche à transformer des arcs elliptiques en polylignes afin de créer un fichier DXF et l'utiliser sur une découpeuse industrielle. J'ai essayé pas mal de méthodes (lisp de gille, décaler les arcs un à un puis les transformer en polyligne) mais elles sont toutes fastidieuses. Je pensais avoir trouver la solution miracle en enregistrant mon fichier directement en DXF R12/LT2. cela a fonctionné plusieurs fois (mes arcs elliptiques ce sont transformés en belles polylignes régulières) mais maintenant mes arcs sont transformés en polylignes toutes saccadées voir ici :image Je ne sais pas d'où ça peut venir ... je suis complètement bloquée ! J'ai essayé PLINETYPE 0 ou 1 + PLINECONVERTMODE 0 ou 1 mais rien n'y fait :( Un grand merci par avance !!
Tramber Posté(e) le 20 juin 2019 Posté(e) le 20 juin 2019 Il y a la variable SPLINESEGS mais je ne sais pas si elle entre dans ce cadre. Une chose est sure, elle est enregistrées par dessin. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
blnd Posté(e) le 20 juin 2019 Auteur Posté(e) le 20 juin 2019 Merci pour votre réponse Malheureusement ça ne fonctionne pas puisque j'ai des arcs elliptiques que je veux convertir en polyligne de manière rapide (les lisp et la méthode décaler pour obtenir des splines puis les transformer en polyligne est fastidieuse..) ce que je ne m'explique pas c'est que j'ai déjà réussi à obtenir des polylignes qui suivent parfaitement la courbe de mes anciens arcs .. certainement une histoire de paramétrage que je n'arrive pas à trouver !!!
(gile) Posté(e) le 20 juin 2019 Posté(e) le 20 juin 2019 Salut, Je ne sais pas quel LISP tu as essayé, mais avec celui-ci, ça ne devrait pas être trop fastidieux. EL2PL transforme les ellipses ou arcs elliptiques sélectionnés en polylignes. ;; EllipseToPolyline ;; Retourne une polyline (vla-object) qui est une approximation de l'ellipse (ou de l'arc elliptique) ;; ;; Argument : une ellipse (vla-object) (defun EllipseToPolyline (el / doc cl norm cen elv pt0 pt1 pt2 pt3 pt4 ac0 ac4 a04 a02 a24 bsc1 bsc2 bsc3 bsc4 plst blst spt spa fspa srat ept epa fepa erat n ) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) spc (if (= 1 (getvar 'cvport)) (vla-get-PaperSpace doc) (vla-get-ModelSpace doc) ) cl (and (= (vla-get-StartAngle el) 0.0) (= (vla-get-EndAngle el) (* 2 pi)) ) norm (vlax-get el 'Normal) cen (trans (vlax-get el 'Center) 0 norm) elv (caddr cen) cen (3dTo2dPt cen) pt0 (mapcar '+ (trans (vlax-get el 'MajorAxis) 0 norm) cen) ac0 (angle cen pt0) pt4 (mapcar '+ cen (trans (vlax-get el 'MinorAxis) 0 norm)) pt2 (3dTo2dPt (trans (vlax-curve-getPointAtparam el (/ pi 4.)) 0 norm)) ac4 (angle cen pt4) a04 (angle pt0 pt4) a02 (angle pt0 pt2) a24 (angle pt2 pt4) bsc1 (/ (ang<2pi (- a02 ac4)) 2.) bsc2 (/ (ang<2pi (- a04 a02)) 2.) bsc3 (/ (ang<2pi (- a24 a04)) 2.) bsc4 (/ (ang<2pi (- (+ ac0 pi) a24)) 2.) pt1 (inters pt0 (polar pt0 (+ ac0 (/ pi 2.) bsc1) 1.) pt2 (polar pt2 (+ a02 bsc2) 1.) nil ) pt3 (inters pt2 (polar pt2 (+ a04 bsc3) 1.) pt4 (polar pt4 (+ a24 bsc4) 1.) nil ) plst (list pt4 pt3 pt2 pt1 pt0) blst (mapcar '(lambda (B) (tan (/ b 2.))) (list bsc4 bsc3 bsc2 bsc1) ) ) (repeat 2 (foreach b blst (setq blst (cons b blst)) ) ) (foreach p (cdr plst) (setq ang (angle cen p) plst (cons (polar cen (+ ang (* 2 (- ac4 ang))) (distance cen p)) plst ) ) ) (foreach p (cdr plst) (setq ang (angle cen p) plst (cons (polar cen (+ ang (* 2 (- ac0 ang))) (distance cen p)) plst ) ) ) (setq pl (vlax-invoke spc 'AddLightWeightPolyline (apply 'append (setq plst (reverse (if cl (cdr plst) plst ) ) ) ) ) ) (vlax-put pl 'Normal norm) (vla-put-Elevation pl elv) (mapcar '(lambda (i v) (vla-SetBulge pl i v)) '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) blst ) (if cl (vla-put-Closed pl :vlax-true) (progn (setq spt (vlax-curve-getClosestPointTo pl (vlax-get el 'Startpoint)) spa (vlax-curve-getParamAtPoint pl spt) fspa (fix spa) ept (vlax-curve-getClosestPointTo pl (vlax-get el 'Endpoint)) epa (vlax-curve-getParamAtPoint pl ept) fepa (fix epa) n 0 ) (cond ((equal spt (trans pt0 norm 0) 1e-9) (if (= epa fepa) (setq plst (sublist plst 0 (1+ fepa)) blst (sublist blst 0 (1+ fepa)) ) (setq erat (/ (- (vlax-curve-getDistAtParam pl epa) (vlax-curve-getDistAtParam pl fepa) ) (- (vlax-curve-getDistAtParam pl (1+ fepa)) (vlax-curve-getDistAtParam pl fepa) ) ) plst (append (sublist plst 0 (1+ fepa)) (list (3dTo2dPt (trans ept 0 norm))) ) blst (append (sublist blst 0 (1+ fepa)) (list (k*bulge (nth fepa blst) erat)) ) ) ) ) ((equal ept (trans pt0 norm 0) 1e-9) (if (= spa fspa) (setq plst (sublist plst fspa nil) blst (sublist blst fspa nil) ) (setq srat (/ (- (vlax-curve-getDistAtParam pl (1+ fspa)) (vlax-curve-getDistAtParam pl spa) ) (- (vlax-curve-getDistAtParam pl (1+ fspa)) (vlax-curve-getDistAtParam pl fspa) ) ) plst (cons (3dTo2dPt (trans spt 0 norm)) (sublist plst (1+ fspa) nil) ) blst (cons (k*bulge (nth fspa blst) srat) (sublist blst (1+ fspa) nil) ) ) ) ) (T (setq srat (/ (- (vlax-curve-getDistAtParam pl (1+ fspa)) (vlax-curve-getDistAtParam pl spa) ) (- (vlax-curve-getDistAtParam pl (1+ fspa)) (vlax-curve-getDistAtParam pl fspa) ) ) erat (/ (- (vlax-curve-getDistAtParam pl epa) (vlax-curve-getDistAtParam pl fepa) ) (- (vlax-curve-getDistAtParam pl (1+ fepa)) (vlax-curve-getDistAtParam pl fepa) ) ) ) (if (< epa spa) (setq plst (append (if (= spa fspa) (sublist plst fspa nil) (cons (3dTo2dPt (trans spt 0 norm)) (sublist plst (1+ fspa) nil) ) ) (cdr (sublist plst 0 (1+ fepa))) (if (/= epa fepa) (list (3dTo2dPt (trans ept 0 norm))) ) ) blst (append (if (= spa fspa) (sublist blst fspa nil) (cons (k*bulge (nth fspa blst) srat) (sublist blst (1+ fspa) nil) ) ) (sublist blst 0 fepa) (if (= epa fepa) (list (nth fepa blst)) (list (k*bulge (nth fepa blst) erat)) ) ) ) (setq plst (append (if (= spa fspa) (sublist plst fspa (1+ (- fepa fspa))) (cons (3dTo2dPt (trans spt 0 norm)) (sublist plst (1+ fspa) (- fepa fspa)) ) ) (list (3dTo2dPt (trans ept 0 norm))) ) blst (append (if (= spa fspa) (sublist blst fspa (- fepa fspa)) (cons (k*bulge (nth fspa blst) srat) (sublist blst (1+ fspa) (- fepa fspa)) ) ) (if (= epa fepa) (list (nth fepa blst)) (list (k*bulge (nth fepa blst) erat)) ) ) ) ) ) ) (vla-delete pl) (setq pl (vlax-invoke spc 'AddLightWeightPolyline (apply 'append plst))) (vlax-put pl 'Normal norm) (vla-put-Elevation pl elv) (foreach b blst (vla-SetBulge pl n B) (setq n (1+ n)) ) ) ) (or (zerop (getvar 'delobj)) (vla-delete el)) pl ) ;; Ang<2pi ;; Retourne l'angle, à 2*k*pi près, compris entre 0 et 2*pi (defun ang<2pi (ang) (if (and (<= 0 ang) (< ang (* 2 pi))) ang (ang<2pi (rem (+ ang (* 2 pi)) (* 2 pi))) ) ) ;; 3dTo2dPt ;; Retourne le point 2d (x y) d'un point 3d (x y z) (defun 3dTo2dPt (pt) (list (car pt) (cadr pt))) ;; Tan ;; Retourne la tangente de l'angle (defun tan (a) (/ (sin a) (cos a))) ;;; SUBLIST Retourne une sous-liste ;;; ;;; Arguments ;;; lst : une liste ;;; start : l'index de départ de la sous liste (premier élément = 0) ;;; leng : la longueur (nombre d'éléments) de la sous-liste (ou nil) (defun sublist (lst start leng / n r) (if (or (not leng) (< (- (length lst) start) leng)) (setq leng (- (length lst) start)) ) (setq n (+ start leng)) (while (< start n) (setq r (cons (nth (setq n (1- n)) lst) r)) ) ) ;; K*BULGE ;; Retourne le bulge proportionnel au bulge de référence ;; Arguments : ;; b : le bulge ;; k : le rapport de proportion (entre les angles ou les longueurs d'arcs) (defun k*bulge (b k / a) (setq a (atan B)) (/ (sin (* k a)) (cos (* k a))) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; EL2PL ;; Convertit ellipses et arcs elliptiques en polylignes ;; Les objets source sont conservés si la variable DELOBJ = 0, ;; supprimés sinon. (defun c:el2pl (/ *error* fra acdoc ss) (vl-load-com) (defun *error* (msg) (if (and (/= msg "Fonction annulée") (/= msg "Function cancelled") ) (princ (strcat (if (= "FRA" (getvar 'locale)) "\nErreur: " "\Error: " ) msg ) ) ) (vla-endUndoMark acdoc) (princ) ) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (ssget '((0 . "ELLIPSE"))) (progn (vla-StartUndoMark acdoc) (vlax-for e (setq ss (vla-get-ActiveSelectionSet acdoc)) (EllipseToPolyline e) ) (vla-delete ss) (vla-EndUndoMark acdoc) ) ) (princ) ) ;; PELL ;; Dessine "à la volée" une approximation d'ellipse ou arc elliptique (polyligne) (defun c:pell (/ *error* ec pe do old ent) (vl-load-com) (defun *error* (msg) (if (and msg (/= msg "Fonction annulée") (/= msg "Function cancelled") ) (princ (strcat (if (= "FRA" (getvar 'locale)) "\nErreur: " "\Error: " ) msg ) ) ) (setvar 'cmdecho ec) (setvar 'pellipse pe) (setvar 'delobj do) (princ) ) (setq ec (getvar 'cmdecho) pe (getvar 'pellipse) do (getvar 'delobj) old (entlast) ) (setvar 'cmdecho 1) (setvar 'pellipse 0) (command "_.ellipse") (while (/= 0 (getvar "cmdactive")) (command pause) ) (if (not (eq old (setq ent (entlast)))) (progn (setvar 'delobj 1) (EllipseToPolyline (vlax-ename->vla-object ent)) ) ) (*error* nil) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
blnd Posté(e) le 20 juin 2019 Auteur Posté(e) le 20 juin 2019 Bonjour Gile, J'ai upploader ton lisp mais quand je l'applique j'ai ce message "Commande: EL2PL1 trouvé(s)Erreur: no function definition: VLAX-CURVE-GETPOINTATPARAM" :unsure:
lecrabe Posté(e) le 20 juin 2019 Posté(e) le 20 juin 2019 Hello SVP tu rajoutes en 1 ère ligne :(VL-LOAD-COM)Et tu recharges le superbe Lisp de Gilles ... Bye, lecrabe Autodesk Expert Elite Team
blnd Posté(e) le 20 juin 2019 Auteur Posté(e) le 20 juin 2019 ça ne change rien .. J'ai réussi à résoudre mon problème en utilisant le lisp arc2seg sur les arcs de mon dessin avant d'en faire un bloc et d'en modifier l'échelle (ce qui transformait mes arcs en arcs elliptiques une fois le bloc explosé). Merci tout de même pour votre aide et bonne fin de journée !
(gile) Posté(e) le 21 juin 2019 Posté(e) le 21 juin 2019 Bonjour Gile, J'ai upploader ton lisp mais quand je l'applique j'ai ce message "Commande: EL2PL1 trouvé(s)Erreur: no function definition: VLAX-CURVE-GETPOINTATPARAM" :unsure: Très étrange...Il ne s'agit pas du (vl-load-com) qui est bien présent au début du code.Soit tu n'as pas bien copié tout le code, soit ton AutoCAD est abimé (essaye une réparation ou une réinstallation). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 21 juin 2019 Posté(e) le 21 juin 2019 Hello YES Gilles ! Je n avais pas vu la fameuse ligne juste après le Defun ... Je suis bigleux !? Bonne journée a Tous, Bye, lecrabe Autodesk Expert Elite Team
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