Aller au contenu

blocs et attributs


dfbiagio

Messages recommandés

Bonjour,

J'aimerai avoir quelques renseignements concernant la manipulation des blocs avec des attributs via un lisp.

En fait, je maîtrise mal le "entnext", j'y vais par tâtonnement, mais parfois c'est galère.

Comment faire pour extraire les valeurs des attributs un à un.

Merci d'avance.

BàV

Lien vers le commentaire
Partager sur d’autres sites

Salut, voici un truc que nous a donné Maître (gile) :

;;;Sélection du bloc :
(setq Bloc (car (entsel "\nSélectionnez le bloc :")))
;;;Récupération du contenu de l'attribut "ATT"
(setq BlocAtt (getpropertyvalue Bloc "ATT"))
;;; Attribution de la valeur "Pouette" à l'attribut "ATT"
(vl-catch-all-apply 'setpropertyvalue (Bloc "ATT" "Pouette"))

J'ai fais ça de tête, je n'ai pas AutoCAD pour tester...

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,

 

La fonction entnext renvoie l'entité qui, dans la base de données, suit celle passée qui est en argument.

Si une référence de bloc contenant des attributs est passée en argument à entnext, la fonction retourne le premier attribut. De même, si on passe cet attribut en argument à entnext, celle-ci renverra l'attribut suivant ou un objet SEQEND s'il n'y a plus d'attributs.

On utilise donc une boucle avec while tant que l'objet renvoyé par entnext est bien un attribut.

 

;; sélectionner un bloc
(setq bloc (car (entsel "\nSélectionnez une référence de bloc: ")))

;; récupérer la liste des données DXF de l'entité sélectionnée
(setq elst (entget bloc))

;; contrôler la validité de l'entité sélectionnée
(cond
 ((/= (cdr (assoc 0 elst)) "INSERT")
  (alert "L'entité sélectionnée n'est pas un bloc.")
 )
 ((null (assoc 66 elst))
  (alert "Le bloc sélectionné n'a pas d'attributs.")
 )
 (T
   ;; récupérer l'entité suivant le bloc sélectionné dans la base de données
   (setq att (entnext bloc))
   ;; boucler tant que cette entité est une référence d'attribut
   (while (= (cdr (assoc 0 (setq elst (entget att)))) "ATTRIB")
     (alert (strcat (cdr (assoc 2 elst)) " = " (cdr (assoc 1 elst))))
     ;; récupérer l'entité suivant l'attribut dans la base de données
     (setq att (entnext att))
   )
 )
)

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

;; sélectionner un bloc
...
 ((null (assoc 66 elst))
  (alert "Le bloc sélectionné n'a pas d'attributs.")
 )
...

Dès que Maître (gile) apparaît, j'apprend des trucs, comme celui-là : null...

 

Mais les commandes que j'ai montré sont énormément plus faciles à utilisées, enfin pour moi, et en plus, c'est un conseil de (gile)...

 

D'ailleurs, j'ai eu la même question que dfbiagio et (gile) m'avait orienté vers getpropertyvalue et setpropertyvalue... Et j'ai adoré ! ! !

 

Mais je comprend pourquoi (gile) explique (à tous le monde) l'utilisation des ent*... Qu'on apprécie tous d'ailleurs...

 

En revanche, j'attends avec impatience la suite avec (entmode...

 

Je vous souhaite force et tendresse... Et bon week-end...

 

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

La demande n'était pas, il me semble, tout à fait identique.

Quant il s'agit d'obtenir ou de définir la valeur d'un attribut d'après son étiquette, les fonctions getpropertyvalue et setpropertyvalue sont tout à fait adaptées.

Mais dfbiagio demandait : "Comment faire pour extraire les valeurs des attributs un à un.", et pour parcourir tous les attributs, la fonction entnext est plus adaptée.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Mais je n'ai jamais mis en doute ta réponse (gile). Elle est tout à fait adaptée et appropriée...

 

Et elle convient amplement pour un bloc dont on ignore le nombre et le nom des attributs.

 

Pour ma part, cette situation n'existe jamais, mais, une fois de plus, je le dis et le répète, ta réponse répond bien à la question... Zéro défaut... ;)

 

Bonne soirée à tous et bon week-end...

 

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

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é