Aller au contenu

Lisp fleche de repère avec champ contenant le nom du calque


sef

Messages recommandés

Bonjour,

 

je cherche un moyen de créer rapidement des flèches de repères contenant le nom du calque de l'objet sélectionné.

 

Je sais déjà le faire manuellement avec la commande "champ" ("Field" sur mon Autocad 2014 en anglais)

mais à chaque fois il faut faire Ctrl+F (Edit Field) puis "objet", "objet" encore, sélectionner l'objet puis "layer" et "ok".

 

Du coup quand on en a des dizaines ça devient vite fastidieux.

 

Ce que j'aimerais c'est cliquer sur l'objet et poser le repère.

 

Je n'ai pas réussi à trouver l'équivalent de "Field" en commande au clavier sinon j'aurais créé un macro.

 

Sinon j'ai trouvé des Lisp qui y ressemblaient et récupéraient par exemple le nom du bloc comme ICI

mais il n'utilise pas la commande "field" du coup le texte créé perds son lien avec l'objet sélectionné.

 

Si vous avez ça dans vos routines, ça me ferait gagner du temps et je serais super reconnaissant. ;) :rolleyes:

 

Merci d'avance et bonne journée. :P

Lien vers le commentaire
Partager sur d’autres sites

Salut.

 

As-tu essayé avec la variable CLAYER ?

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.

 

As-tu essayé avec la variable CLAYER ?

 

"CLAYER" c'est pour définir le calque courant...

ex: "CLAYER" puis "1" défini le calque "1" comme courant

(si ce calque existe)

 

Pas tout à fait ce que je recherche.

 

Par contre je viens de voir dans "Field" qu'on obtient

une expression de ce genre la:

 

%<\AcObjProp Object(%<\_ObjId 8796088379056>%).Layer>%

 

Du coup il faudrait que le premier clic sur l'objet

remplisse ce qui est derrière _ObjId

 

Malheureusement je ne suis pas assez fort en lisp pour ça,

c'est pourquoi je fais appel à vous, les Spécialistes :D ;)

Lien vers le commentaire
Partager sur d’autres sites

Re.

 

La variable CLAYER peut aussi être intérogée.

 

Je ne suis pas très sûr d'avoir compris... Tu veux dessiner une flèche avec un texte au bout et ce texte serait le nom d'un calque sélectionné par le choix d'une entité ?

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

Re.

 

La variable CLAYER peut aussi être intérogée.

 

Je ne suis pas très sûr d'avoir compris... Tu veux dessiner une flèche avec un texte au bout et ce texte serait le nom d'un calque sélectionné par le choix d'une entité ?

 

Exactement ça... Une petite image pour illustrer ce que je veux:

 

1294237101.jpg

Lien vers le commentaire
Partager sur d’autres sites

Si (gile) s'en mêle... Je ne pourrais jamais faire mieux... ;)

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

Avec un champ :

 

(defun c:sef (/ ent)
 (vl-load-com)
 (if (setq ent (entsel))
   (progn
     (command "_leader" (cadr ent) pause "" "foo" "")
     (vla-put-TextString
       (vlax-ename->vla-object (entlast))
       (strcat "%<\\AcObjProp Object(%<\\_ObjId "
               (vla-GetObjectIdString
                 (vla-get-Utility (vla-get-Activedocument (vlax-get-acad-object)))
                 (vlax-ename->vla-object (car ent))
                 :vlax-false
                 )
               ">%).Layer>%"
       )
     )
   )
 )
 (princ)
)

  • Upvote 1

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Un LISP minimaliste sans champ :

 

(defun c:sef (/ ent)
 (if (setq ent (entsel))
   (command "_leader" (cadr ent) pause "" (cdr (assoc 8 (entget (car ent)))) "")
 )
 (princ)
)

 

Merci pour ces réponses rapides. ;)

 

Je viens de tester, et ça fonctionne.

 

Par contre, je voulais un champ pour conserver le lien entre l'objet et le texte.

Si demain on change le nom du calque, le repère se mets à jour.

 

Autre avantage de la fonction "field", même si on est en espace papier,

elle peut aller chercher les propriétés d'un élément se trouvant dans l'espace objet

(comme le nom du calque), ce qui n'est pas possible avec ton lisp.

Lien vers le commentaire
Partager sur d’autres sites

Tu as probablement raté mon dernier message.

 

Exact, quelle réactivité ;)

le temps que je réponde tu avais mis la deuxième version avec Champ.

 

Du coup ça fonctionne, on a un champ intelligent.

 

Par contre le repère est créé en espace objet et pas dans l'espace papier.

 

Le faire à la main avec la commande "field" permets de piquer les propriétés

sans rentrer dans la fenêtre flottante et le repère est créé dans la présentation.

 

Du coup si quelqu'un a une version pour créer ces repères dans l'espace papier

en allant chercher les infos des éléments qui sont dans l'espace objet je suis preneur.

 

On y est presque ;) mais c'est déjà super :) merci :P

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é