Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

voila j'ai un probleme j'ai plusieur bloc dans les quel il y a des attibuts renseigné ou non

je créé une selection de mes elements

(setq ss (ssget "X" '((0 . "INSERT") (66 . 1))))

 

apres pour chaque elements de ma selection je fais

(setq l (entget (setq e (ssname ss (setq i (1+ i))))))

 

pour avoir la liste de ses attributs

quand j 'affiche l cela me donne :

((-1 . ) (0 . INSERT) (330 . ) (5 . A4E5) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . CALQUE) (100 . AcDbBlockReference) (66 . 1) (2 . BLOC2) (10 875732.0 159160.0 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))

 

je voudrait afficher la valeur de plusieur attribut, le probleme c'est que les attributs que je veux ne sont pas dans cette liste (par exemple la rotation n'y est pas)

je debut en lisp il y a peut etre un meilleur moyen de proceder mais pour le moment je ne le connais pas

 

merci

Posté(e)

Salut,

 

C'est bien pour un début.

Quand tu fais :

(setq l (entget (setq e (ssname ss (setq i (1+ i))))))

tu affectes à e le nom d'ntité (ENAME) de la référence de bloc et à l sa liste de données DXF.

Chaque élément (généralement une paire pointée, parfois une liste) de cette liste est un "groupe DXF". Le premier élément de chaque sous-liste est un entier (le "code de groupe"), qui définit le type de donnée.

Le code de groupe 0 correspond au type d'entité (0 . INSERT) signifie que la liste DXF est celle d'une référence de bloc.

 

Pour avoir la liste équivalente pour les références d'attribut de ce bloc, il faut chercher dans les entités suivantes avec la fonction entnext.

On fait ça dans une boucle while en général, dont la condition d'arrêt est soit que le type d'entité ne soit plus un attribut (ATTRIB) soit que ce ce soit un objet SEQEND qui marque la fin de la séquences d'attributs pour cette référence de bloc.

 

Petit exemple dans le style de ce que tu as écrit :

(setq a (entnext e))
(while (= "ATTRIB" (cdr (assoc 0 (setq l (entget (setq e (entnext e)))))))
 (princ "\n\n")
 (princ l)
)

 

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

Posté(e)

voila je met a jour car grace a toi j'ai trouver un indice de ce que je cherche

 

((-1 . ) (0 . ATTRIB) (330 . ) (5 . 9FA5)
(100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 0) (62 . 0) (100 . AcDbText) (10 874799.0 160071.0 0.0)
(40 . 0.8) (1 . 0) (50 . 2.81776) (41 . 0.9) (51 . 0.0) (7 . TXT_ROMANS) (71 . 0) (72 . 0) (11 0.0 0.0 0.0)
(210 0.0 0.0 1.0) (100 . AcDbAttribute) (280 . 0) (2 .   DIG_LIENS) (70 . 1) (73 . 0) (74 . 0) (280 . 0))

 

jai trouver le nom d'un des attribut que je cherche DIG_LIENS me manque plus qu 'a reciperer sa valeur

Posté(e)

Regarde les fonctions assoc et cdr dans l'aide ainsi que la rubrique Reference DXF.

 

(cdr (assoc 2 l)) retourne l'étiquette de l'attribut.

(cdr (assod 1 l)) retourne la valeur de l'attribut.

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

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é