Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Comment puis-je récupérer la valeur d'un attribut constant ?

 

J'ai essayé de la récupérer de la même manière qu'un attribut classique, mais ça ne marche pas !

 

Merci de votre aide.

 

Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent.

 

Maréchal Foch

Posté(e)

Salut,

 

Tu peux récupérer la valeur d'un attribut constant parmi les composants de la définition du bloc.

 

en AutoLISP :

 

(setq bloc (tblsearch "Block" "Nom_du_bloc")
     ent  (cdr (assoc -2 bloc))
     loop T
)
(while (and loop ent)
 (setq	elst (entget ent)
ent  (entnext ent)
 )
 (if (and (= (cdr (assoc 0 elst)) "ATTDEF")
   (= (logand 2 (cdr (assoc 70 elst))) 2)
   (= (cdr (assoc 2 elst)) "ETIQUETTE") ; l'étiquette en majuscules
     )
   (setq loop nil
  ret  (cdr (assoc 1 elst))
   )
 )
) 

 

En Visual LISP :

 

(vlax-for obj
  (vla-item (vla-get-Blocks
	      (vla-get-ActiveDocument (vlax-get-acad-object))
	    )
	    "Nom_du_bloc"
  )
 (if (and (= (vla-get-ObjectName obj) "AcDbAttributeDefinition")
   (= (vla-get-Constant obj) :vlax-true)
   (= (vla-get-TagString obj) "ETIQUETTE")
     )
   (vla-get-TextString obj)
 )
) 

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

Posté(e)

Super, ça marche nickel !

 

Surtout en Lisp car en Visual je ne sais pas trop l'exploiter.

 

Est-ce que je peux abuser en te demandant comment je peux rajouter une contrainte ?

 

En effet le bloc que je veux exploiter est inséré dans plusieurs présentations.

Alors je voudrais récupérer la valeur de l'attribut du bloc inséré dans la présentation courante.

 

du genre :

 

(setq Ongcour (getvar "ctab")) ; détermine la présentation courante

 

(setq bloc (ssget "X" (list (cons 2 "Nom_du_bloc") (cons 410 Ongcour))))

 

Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent.

 

Maréchal Foch

Posté(e)

Salut,

 

Non car en fait j'attaque des blocs de cadres et je fais un seul lisp fonctionnant sur plusieurs blocs avec le même début de nom.

 

donc j'utilise les bloc Cadre_A4, Cadre_A3, Cadre_A0 ....

 

et dans mon lisp j'interroge avec Cadre_*

 

(setq bloc (tblsearch "Block" "Cadre*")

ent (cdr (assoc -2 bloc))

loop T

)

 

.....

 

Ceci explique cela.

 

Merci pour tout.

 

Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent.

 

Maréchal Foch

Posté(e)

Tu récupères le nom complet du bloc de la présentation active :

 

 

(setq Ongcour (getvar "ctab")) ; détermine la présentation courante

 

(setq bloc (ssget "X" (list (cons 2 "Cadre*") (cons 410 Ongcour))))

 

(setq nom (cdr (assoc 2 (entget (ssname bloc 0)))))

 

puis tu te sert de ce nom pour parcourrir la définition

 

(setq bloc-def (tblsearch "Block" nom) ...)

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

Posté(e)

Oui tu as raison.

 

Ca marche comme ça.

 

Merci de ton aide.

 

Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent.

 

Maréchal Foch

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é