arcuce Posté(e) le 3 septembre 2010 Posté(e) le 3 septembre 2010 Bonjour,voila j'ai un probleme j'ai plusieur bloc dans les quel il y a des attibuts renseigné ou nonje 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 attributsquand 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
(gile) Posté(e) le 3 septembre 2010 Posté(e) le 3 septembre 2010 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
arcuce Posté(e) le 3 septembre 2010 Auteur Posté(e) le 3 septembre 2010 merci pour ta reponse je vais essayer de me diriger dans cette direction
arcuce Posté(e) le 3 septembre 2010 Auteur Posté(e) le 3 septembre 2010 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
(gile) Posté(e) le 3 septembre 2010 Posté(e) le 3 septembre 2010 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
arcuce Posté(e) le 3 septembre 2010 Auteur Posté(e) le 3 septembre 2010 ca y est merci jai pu recupperer ce que je voulais
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant