Aller au contenu

Transformer un arc en cercle


Messages recommandés

Posté(e)

C'est possible dans AutoCAD 2006 en utilisant l'option Fermer de la commande JOINDRE.

Posté(e)

Pour ceux qui n'ont pas la chance de travailler avec AutoCAD 2006, mais qui voudraient quand même transformer des arcs en cercles, ce petit LISP :

 

(defun c:a2c (/ arc accrobj_prec)
 (setq accrobj_prec (getvar "osmode"))
 (while (not (setq arc (car (entsel "\nSélectionnez un arc: "))))
 )
 (while (/= (cdr (assoc 0 (entget arc))) "ARC")
   (setq arc
   (car
     (entsel
       "\L'objet sélectionné n'est pas un arc.
   \nSélectionnez un arc:"
     )
   )
   )
 )
 (setvar "osmode" 0)
 (entmake
   (list '(0 . "CIRCLE")
  (cons 10 (trans (cdr (assoc 10 (entget arc))) 0 1))
  (cons 40 (cdr (assoc 40 (entget arc))))
   )
 )
 (entdel arc)
 (setvar "osmode" accrobj_prec)
 (princ)
) 

  • Like 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Très bien (gile) mais 2 remarques.

 

Tu veux utiliser (entmake) cela n'est que mieux!

 

Mais pourquoi ne récupéres-tu pas des infos de ton arc?

code 8 6 62 48 (si existant) et ....67? (pas justifié vu qu'il y a une selection auparavant qui te détermine l'espace courant)

 

Quand tu utilises (entmake) tu n'as pas besoin de te préoccuper des variables.

Ici l'usage de "osmode" n'a aucune importance. Comme tu pourrais ignorer "clayer" si tu utilises le code dxf (8 . "non du calque")

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Merci Bonuscad pour tes remarques toujours pertinentes.

 

J'ai effectivement oublié de retirer la gestion de "osmode" quand j'ai remplacé (command) par (entmake), de même, le (trans) qui n'a plus lieu d'être.

 

Pour ce qui est des codes DXF, je n'y ai pas pensé parceque je n'utilise qu'une couleur et qu'un type de ligne par calque, pour le code 8 par contre, j'aurais dû y penser, je corrige :

(defun c:a2c (/ val_dxf arc lst)

 (defun val_dxf (code ent)
   (cdr (assoc code (entget ent)))
 )

 (while (not
   (and
     (setq arc (car (entsel "\nSélectionnez un arc: ")))
     (= (val_dxf 0 arc) "ARC")
   )
 )
 )
 (setq	lst (list '(0 . "CIRCLE")
	  (cons 10 (val_dxf 10 arc))
	  (cons 40 (val_dxf 40 arc))
	  (cons 8 (val_dxf 8 arc))
                 (cons 210 (val_dxf 210 arc))
    )
 )
 (foreach code	'(6 62 48)
   (if	(val_dxf code arc)
     (setq lst
     (reverse (cons (cons code (val_dxf code arc)) (reverse lst))
     )
     )
   )
 )
 (command "_regen")
 (entmake lst)
 (entdel arc)
 (princ)
) 

 

[Edité le 5/11/2005 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

La commande inverse, pour transformer un cercle en arc :

 

(defun c:c2a (/ val_dxf cercle cen ang1 ang2)

 (defun val_dxf (code ent)
   (cdr (assoc code (entget ent)))
 )

 (while (not
   (and
     (setq cercle (car (entsel "\nSélectionnez un cercle: ")))
     (= (val_dxf 0 cercle) "CIRCLE")
   )
 )
 )
 (setq cen (val_dxf 10 cercle))
 (command "_ucs" "_n" "_ob" cercle)
 (initget 1)
 (setq	ang1 (getangle '(0 0) "\nSpécifiez l'angle de départ de l'arc: "))
 (initget 1)
 (setq	ang2 (getangle '(0 0) "\nSpécifiez l'angle de fin de l'arc: "))
 (command "_ucs" "_p")
 (setq	lst (list '(0 . "ARC")
	  (cons 10 cen)
	  (cons 40 (val_dxf 40 cercle))
	  (cons 8 (val_dxf 8 cercle))
	  (cons 50 ang1)
	  (cons 51 ang2)
	  (cons 210 (val_dxf 210 cercle))
    )
 )
 (foreach code	'(6 62 48)
   (if	(val_dxf code cercle)
     (setq lst
     (reverse
       (cons (cons code (val_dxf code cercle)) (reverse lst))
     )
     )
   )
 )
 (command "_regen")
 (entmake lst)
 (entdel cercle)
 (princ)
) 

 

PS1 : J'ai ajouté un (command "_regen") avant le (entmake) dans les deux codes, pour créer une sorte de marque pour la commande "Annuler". En effet, la création d'objets avec (entmake) est comme "transparente" et la commande "Annuler" (U) lancée après ce type de routine annule le (entmake) et la commande précédente.

Peut-être que quelqu'un connaît un moyen plus "élégant" ?

 

PS2 : Pour que la routine fonctionne quelque soit le SCU courant et le SCO du cerle (en 3D), je n'ai trouvé d'autre moyen que de passer par un "SCU objet" temporaire.

 

[Edité le 5/11/2005 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

En une seule commande, transformer les arcs en ellipse ou vice versa, fonctionne aussi avec les cercles (géométriquement parlant, le cercle n'est-il pas une ellipse particulière ?) voir ici.

 

En fait pas encore de "vice-versa" (pas tout à fait au point), mais la possibilité de sélectionner l'arc avant ou après le lancement de la commande.[Edité le 6/11/2005 par (gile)]

Çà y est le vice-versa ici

 

[Edité le 10/11/2005 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 4 ans après...
Posté(e)

je me débrouillais en coupant un morceau du cercle , mais je voulais connaitre un méthode plus rapide

 

merci pour les conseils , ca fait toujours plaisir

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é