balyoa Posté(e) le 4 mai 2012 Posté(e) le 4 mai 2012 Bonjour, Je souhaite convertir des ellipses en cercles. Le petit et le grand rayon de mes ellipses sont égaux. L'astuce donnée sur caderix ne marche pas (http://www.caderix.com/journal/spip.php?article216). Qui a une idée ? Merci. Yo
lecrabe Posté(e) le 4 mai 2012 Posté(e) le 4 mai 2012 Hello Google est mon ami et donc j'ai trouve un truc sur le Net ! J'ai fais la micro-modif necessaire pour que la routine d'origine dessine un cercle (et non pas un Arc) mais comme je suis une tanche en Lisp, je ne sais pas boucler sur les N Ellipses d'une selection = GRRR ! Mais je suis sur qu'un pro va nous ameliorer tout ca ... lecrabe42 qui taquine le balyoa38 ;; http://www.cadtutor.net/forum/showthread.php?62174-Convert-Ellipse-to-Arc ;; Convert Ellipse to Circle (defun c:e2c (/ acaddoc acadms acadobj center endangle obj radius ss ssn startangle) (vl-load-com) (if (setq ss (ssget '((0 . "ellipse")))) (progn (setq acadobj (vlax-get-acad-object)) (setq acaddoc (vla-get-activeDocument acadobj)) (setq acadms (vla-get-modelspace acaddoc)) (setq ssn (ssname ss 0)) (setq obj (vlax-ename->vla-object ssn)) (if obj ;(equal (vla-get-RadiusRatio obj) 1 0.0001) (progn (setq radius (vla-get-MajorRadius obj)) (setq Startangle (vla-get-Startangle obj)) (setq Endangle (vla-get-Endangle obj)) (setq Center (vlax-get obj 'center)) ;; Pour ne pas effacer l'Ellipse originelle ;; (entdel ssn) ;; (vla-addarc acadms (vlax-3d-point Center) radius Startangle Endangle) (vla-addcircle acadms (vlax-3d-point Center) radius ) ) ; progn (alert "> Ellipse objects failed to be converted") ) ; if ) ; progn ) ; if (princ) ) ; defun Autodesk Expert Elite Team
lecrabe Posté(e) le 4 mai 2012 Posté(e) le 4 mai 2012 Hello Google etant toujours mon ami, j'ai enfin trouve la routine exacte chez Lee Mac (encore un Pro)qui convertit TOUTES les Ellipses dont les 2 axes sont egaux seulement donc c en fait un cercle ! Merci Google, lecrabe ;; Ellipse 2 Arc/Circle - Lee Mac 2011 - www.lee-mac.com ;; Converts Circular Ellipses (Axis Ratio = 1) to Circles/Arcs (defun c:e2a ( / e i s ) (if (setq s (ssget "_:L" '((0 . "ELLIPSE") (40 . 1.0)))) (repeat (setq i (sslength s)) (setq e (entget (ssname s (setq i (1- i))))) (if (entmakex (if (equal (abs (- (cdr (assoc 42 e)) (cdr (assoc 41 e)))) (+ pi pi)) (apply 'append (cons (list (cons 0 "CIRCLE") (cond ((assoc 6 e)) ('( 6 . "BYLAYER"))) (cond ((assoc 39 e)) ('(39 . 0.0))) (cond ((assoc 62 e)) ('(62 . 256))) (cons 10 (trans (cdr (assoc 10 e)) 0 (cdr (assoc 210 e)))) (cons 40 (distance '(0. 0. 0.) (cdr (assoc 11 e)))) ) (mapcar (function (lambda ( x ) (if (not (member (car x) '(-1 0 5 6 10 11 39 40 41 42 62 100 330))) (list x) ) ) ) e ) ) ) (apply 'append (cons (list (cons 0 "ARC") (cond ((assoc 6 e)) ('( 6 . "BYLAYER"))) (cond ((assoc 39 e)) ('(39 . 0.0))) (cond ((assoc 62 e)) ('(62 . 256))) (cons 10 (trans (cdr (assoc 10 e)) 0 (cdr (assoc 210 e)))) (cons 40 (distance '(0. 0. 0.) (cdr (assoc 11 e)))) (cons 50 (+ (cdr (assoc 41 e)) (angle '(0. 0. 0.) (trans (cdr (assoc 11 e)) 0 1)))) (cons 51 (+ (cdr (assoc 42 e)) (angle '(0. 0. 0.) (trans (cdr (assoc 11 e)) 0 1)))) ) (mapcar (function (lambda ( x ) (if (not (member (car x) '(-1 0 5 6 10 11 39 40 41 42 62 100 330))) (list x) ) ) ) e ) ) ) ) ) (entdel (cdr (assoc -1 e))) ) ) ) (princ) ) Autodesk Expert Elite Team
balyoa Posté(e) le 7 mai 2012 Auteur Posté(e) le 7 mai 2012 Salut, Sur mon dessin ton lisp ne marche pas le Crabe. Quand je sélectionne une ellipse il ne me l'ajoute pas au jeu de sélection : Commande: e2aChoix des objets: 0 trouvé(s) Pourtant j'ai bien une ellipse avec petit rayon = grand rayon = 0.04Et le lisp de gile (arcedit) ne me traite qu'une ellipse à la fois, moi comme d'hab je dois en traiter des milliers ;-( A suivre et bonne journée ! Yo ;-)
lecrabe Posté(e) le 7 mai 2012 Posté(e) le 7 mai 2012 Hello Balyoa38 Euh en general quand je propose une routine, j'ai teste ! Donc je te confirme que cette routine (E2A de Lee-Mac) vient de me transformer (en une seule passe) 2 vraies ellipses AutoCAD (construites de facon differente) en 2 cercles ... Tests realises avec : - MAP 2013 English 32 bits- ACAD 2012 French 32 bits- MAP 2011 French 32 bits Donc NO COMPRENDO ! lecrabe42 Autodesk Expert Elite Team
bryce Posté(e) le 7 mai 2012 Posté(e) le 7 mai 2012 Bonjour, Pourtant j'ai bien une ellipse avec petit rayon = grand rayon = 0.04 Le Lisp de Lee Mac ne prend en compte que les ellipses dont les 2 axes ont exactement la même longueur (rapport petit axe / grand axe = 1).Je pense que ce n'est pas le cas de tes ellipses: si tu affiches 8 décimales, tu constateras sans doute une différence. ;)Cela expliquerait également le fait que la transformation en région puis la décomposition ne produise pas un cercle. Une petite modif dans le Lisp de Lee Mac devrait faire l'affaire.Essaie de remplacer cette ligne (if (setq s (ssget "_:L" '((0 . "ELLIPSE") (40 . 1.0)))) par celle-ci : (if (setq s (ssget "_:L" '((0 . "ELLIPSE") (-4 . ">")(40 . 0.9)))) Le Lisp prendra en compte les ellipses dont le rapport petit axe / grand axe est supérieur à 0.9 (valeur que tu peux adapter). Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
lecrabe Posté(e) le 7 mai 2012 Posté(e) le 7 mai 2012 Hello Waouh encore Merci Bryce pour la Micro-Modif ! Je crois que tu as le doigt sur LE probleme de Balyoa38 !? lecrabe42 Autodesk Expert Elite Team
balyoa Posté(e) le 7 mai 2012 Auteur Posté(e) le 7 mai 2012 Merci Bryce de Nice ;-) ca marche Avec 8 décimales voilà ce que j'avais pour les ellipses :Grand rayon = 0.03999426Petit rayon = 0.0399936Rapport des rayons : 0.99998347 Avec ta modif ca marche nickel !!! t'es un killer ! Tu veux pas me proposer uen formation en lisp ? Ps pour lecrabe42 : je ne remettais pas en cause tes tests ;-) A+ Yo
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