Aller au contenu

Le centre d'un Cercle


willy95

Messages recommandés

Bonjour à tous,

 

J'ai vraiment du mal à ecrire quelques lignes en lisp pour récuperer les coordonnées du centre d'un cercle et son diametre que je viens de tracer par 3 points en utilisant (entlast).

 

Qui peux me guider sur une solution plutot simple.

 

Merci par avance.

Lien vers le commentaire
Partager sur d’autres sites

Salut.

Tu as tout ici, le centre est le code DXF 10 et le rayon est le DXF 40.

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Je débute tout juste en lisp mais j'ai tenté de t'écrire un petit quelque chose:

(setq ent (car (entsel)))		; sélection du cercle
(setq ent-liste (entget ent))		; création de la liste
(if (= (cdr (assoc 0 ent-liste)) "CIRCLE")
				; vérification du type d'entité
 (progn
   (setq XY (cdr (assoc 10 ent-liste))); récupération des coordonnées dans la variable XY
   (setq R (cdr (assoc 40 ent-liste)))	; récupération du rayon dans la variable R
 )
 (alert "Ce n'est pas un cercle")
)					; fin du IF
(princ)

 

C'est probablement pas très bien écrit mais ça fonctionne chez moi.

Projeteur Béton Armé sur Revit et AutoCAD 2023

Une connaissance acquise ne devient vivante que si on l’a repensée par soi-même.

Lien vers le commentaire
Partager sur d’autres sites

Mais en fait, je n'arrive pas à sélectionner le cercle juste avant tracé avec "entlast", ce bout de code me redemande par selection le cercle :(

 


(command "cercle" "3p" DiamPoint1 DiamPoint2 DiamPoint3)

(setq ent (car (entsel) ))                    ; sélection du cercle
        
(setq ent-liste (entget ent))                 ; création de la liste
(if (= (cdr (assoc 0 ent-liste)) "CIRCLE")    ; vérification du type d'entité
 (progn
   (setq XY (cdr (assoc 10 ent-liste)))      ; récupération des coordonnées dans la variable XY
   (setq R (cdr (assoc 40 ent-liste)))       ; récupération du rayon dans la variable R
 )
 (alert "Ce n'est pas un cercle")
)                                             ; fin du IF
(princ)

Lien vers le commentaire
Partager sur d’autres sites

Salut, je pense que tu devrais remplacer :

(setq ent (car (entsel) ))

Par

(setq ent (car (entlast) ))

Mais je n'ai pas le début du LISP...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut, je pense que tu devrais remplacer :

(setq ent (car (entsel) ))

Par

(setq ent (car (entlast) ))

Mais je n'ai pas le début du LISP...

 

Denis...

 

 

Malheuresement quand je fais ça (setq ent (car (entlast) ))

 

cela me dit : erreur: type d'argument incorrect: consp <Nom d'entité: 7ff4d69cb220>

 

il existe surement une petite subtilité que je ne connais pas.

Lien vers le commentaire
Partager sur d’autres sites

Si tu utilise un "entlast" plutôt qu'un "entsel", la vérification du type d'entité ne sert plus a rien. Tu peux supprimer tout ce qui s'y rapporte.

Garde quand même les deux lignes après le "progn". :rolleyes:

Projeteur Béton Armé sur Revit et AutoCAD 2023

Une connaissance acquise ne devient vivante que si on l’a repensée par soi-même.

Lien vers le commentaire
Partager sur d’autres sites

Remplace le tout par ça :

(setq ent-liste (entget (entlast)))

 

Plus besoin de la variable "ent" du coup.

C'est le "car" qui récupère le premier élément de la liste et qui supprime tous les autres éléments qui fait que tu n'as plus que l'identifiant.

 

Pour faire simple tu as juste besoin de ça :

(setq ent-liste (entget (entlast))) ; récupération de la liste du dernier cercle crée
   (setq XY (cdr (assoc 10 ent-liste))); récupération des coordonnées dans la variable XY
   (setq R (cdr (assoc 40 ent-liste)))	; récupération du rayon dans la variable R

  • Upvote 2

Projeteur Béton Armé sur Revit et AutoCAD 2023

Une connaissance acquise ne devient vivante que si on l’a repensée par soi-même.

Lien vers le commentaire
Partager sur d’autres sites

Je pense que c'était le command qui déconnait, mais je n'en suis pas sûr...

 

Voici ce qui fonctionne :

(defun c:RecupDataCercle (/ ent Coord Ray)
 (command "_circle" "3p" pause pause pause)
 (setq ent (entget (entlast)))
 (setq Coord (cdr (assoc 10 ent)))	; récupération des coordonnées dans la variable XY
 (setq Ray (cdr (assoc 40 ent)))	; récupération du rayon dans la variable R
 (princ "\nCoordonnées du centre : ")
 (princ Coord)
 (princ "\tRayon : ")
 (princ Ray)
 (princ)
)

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Remplace le tout par ça :

(setq ent-liste (entget (entlast)))

 

Plus besoin de la variable "ent" du coup.

C'est le "car" qui récupère le premier élément de la liste et qui supprime tous les autres éléments qui fait que tu n'as plus que l'identifiant.

 

Pour faire simple tu as juste besoin de ça :

(setq ent-liste (entget (entlast))) ; récupération de la liste du dernier cercle crée
   (setq XY (cdr (assoc 10 ent-liste))); récupération des coordonnées dans la variable XY
   (setq R (cdr (assoc 40 ent-liste)))	; récupération du rayon dans la variable R

 

MERCI BEAUCOUP A TOUS, cette version fonctionne à merveille.

Lien vers le commentaire
Partager sur d’autres sites

De rien, content d'avoir rendu service... ;)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

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é