dfbiagio Posté(e) le 19 avril 2019 Posté(e) le 19 avril 2019 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
DenisHen Posté(e) le 19 avril 2019 Posté(e) le 19 avril 2019 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)
(gile) Posté(e) le 19 avril 2019 Posté(e) le 19 avril 2019 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 - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 19 avril 2019 Posté(e) le 19 avril 2019 ;; 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)
(gile) Posté(e) le 19 avril 2019 Posté(e) le 19 avril 2019 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 - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 20 avril 2019 Posté(e) le 20 avril 2019 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)
dfbiagio Posté(e) le 23 avril 2019 Auteur Posté(e) le 23 avril 2019 Je vous remercie tous pour votre aide. Vous m'avez permis de me remémorer la fonction entnext.Bonne journée
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