Aller au contenu

Convertir des Ellipses en Cercles


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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: e2a

Choix des objets: 0 trouvé(s)

 

Pourtant j'ai bien une ellipse avec petit rayon = grand rayon = 0.04

Et 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 ;-)

Posté(e)

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

Posté(e)

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).

Posté(e)

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

Posté(e)

Merci Bryce de Nice ;-) ca marche

 

Avec 8 décimales voilà ce que j'avais pour les ellipses :

Grand rayon = 0.03999426

Petit rayon = 0.0399936

Rapport 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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité