capde06 Posté(e) le 12 octobre 2009 Posté(e) le 12 octobre 2009 j'utilise ces fonctions pour lire et modifier un attribut ;; ; met a jour l'attribut d'un bloc : entité avant entget + etiquette + code + valeur(defun upd_blk(obj eti code txt)(setq ent_att (entnext obj))(while (/= (cdr (assoc 0(entget ent_att))) "SEQEND")(if (= (cdr(assoc 2(entget ent_att))) eti)(progn(setq e (entget ent_att))(entmod (subst (cons code txt) (assoc code e)e))(entupd obj)))(setq ent_att (entnext ent_att)))) ;; ; renvoie la valeur d'un attribut : entité avant entget + etiquette (defun val_eti(enti eti / alt) (setq ent_att (entnext enti)) (while (/= (cdr (assoc 0(entget ent_att))) "SEQEND") (if (= (cdr(assoc 2(entget ent_att))) eti) (setq alt (cdr(assoc 1(entget ent_att)))) ) (setq ent_att (entnext ent_att)) ) alt)jusqu'a la tout va bien maintenant quand je met le bloc avec attribut dans une étiquette multipleje n'arrive pas a lire ou modifier les attributspouvez vous m'aider jai bien essayé mais la on tombe sur une entité complexe trop complexe pour moi le but est de créer 2 fonctions une pour lire une pour modifier les attribut de l'étiquette multipledepuis des programmes lisp on ne sais jamaisvoici les étiquettes que j'utilisehttp://dl.free.fr/vCzbwdX2o Vous fîtes ce que vous pûtes et vous m'épatâtes !!!!
Patrick_35 Posté(e) le 12 octobre 2009 Posté(e) le 12 octobre 2009 Salut Comme tu es dans la section Visual Lisp, je donne une réponse vl (setq bl (vlax-ename->vla-object (car (entsel)))) ; Sélection d'un bloc (setq att (vlax-invoke bl 'getattributes)) ; liste des attributs (vla-get-textstring (nth 0 att)) ; Récuperer la valeur du 1er attribut (vla-put-textstring (nth 0 att) "Exemple") ; Ecrire "Exemple" dans le 1er Attribut @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
capde06 Posté(e) le 12 octobre 2009 Auteur Posté(e) le 12 octobre 2009 salut patrickdabord mercicette fonction marche très bien sur un bloc avec attribut simplemais pas dans mon casle bloc dépend d'une étiquette multiplecommand LIGNEDEREPMULTregarde le lien du 1er messagetu as un exemple Vous fîtes ce que vous pûtes et vous m'épatâtes !!!!
Patrick_35 Posté(e) le 12 octobre 2009 Posté(e) le 12 octobre 2009 Ah oui Alors de cette manière par exemple (setq bl (entget (car (entsel)))) ; Sélection (setq lst (cdr (vl-remove-if-not '(lambda(x)(eq (car x) 302)) bl))) ; liste des textes (setq ent (subst (cons 302 "Exemple") (nth 0 lst) bl)) ; changer le 1er texte (entmod ent) ; Mise à jour @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
capde06 Posté(e) le 12 octobre 2009 Auteur Posté(e) le 12 octobre 2009 coolca marchemais peut on lire et modifier en choisissant le non de l'étiquettecode dxf 2dans le meme principe que mes fonctions lisp [Edité le 12/10/2009 par capde06] Vous fîtes ce que vous pûtes et vous m'épatâtes !!!!
Patrick_35 Posté(e) le 12 octobre 2009 Posté(e) le 12 octobre 2009 Alors comme ceci (setq bl (entget (car (entsel)))) ; Sélection (foreach cod bl ; liste avec l'attribut (and (eq (car cod) 330) (setq 1er cod)) (and (eq (car cod) 302) 1er (setq lst (cons (cons (cdr 1er) (cdr cod)) lst) 1er nil)) ) (foreach cod (cdr (reverse lst)) ; parcourir la liste (and (eq (cdr (assoc 2 (entget (car cod)))) "Z") ; code dxf 2 (setq bl (subst (cons 302 "Tester") (cons 302 (cdr cod)) bl)) ; changer le texte ) ) (entmod bl) : Mettre à jour @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
capde06 Posté(e) le 12 octobre 2009 Auteur Posté(e) le 12 octobre 2009 bravo Patrickj'ai beaucoup cherché a la faire je n'y suis jamais arrivéje vais modifier pour en faire une fonctionet je vais pouvoir l'intégrer a mon programme de topoencore merci Vous fîtes ce que vous pûtes et vous m'épatâtes !!!!
capde06 Posté(e) le 14 octobre 2009 Auteur Posté(e) le 14 octobre 2009 Salut Patrick en bricolant ta fonction je me suis aperçu d'un cas particulier si tu testes sur l'étiquette avec beaucoup d'attributs le prog remplit tous les attribut avec la même valeur j'ai essayé de debogué, je n'y suis pas arrivé essai de regardé merci d'avance Vous fîtes ce que vous pûtes et vous m'épatâtes !!!!
Patrick_35 Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 Dernière version ? ;) (setq bl (car (entsel))) ; Sélection (setq blvl (vlax-ename->vla-object bl)) convertir l'objet en vl (setq lst (cdr (vl-remove-if-not '(lambda(x)(eq (car x) 330)) (entget bl)))) ; liste des attributs (foreach cod lst ; parcourir la liste (and (eq (cdr (assoc 2 (entget (cdr cod)))) "Z") ; code dxf 2 ; (vla-getblockattributevalue blvl (vla-get-objectid (vlax-ename->vla-object (cdr cod))))) ; récuperer la valeur du texte (vla-setblockattributevalue blvl (vla-get-objectid (vlax-ename->vla-object (cdr cod))) "Exemple") ; changer le texte ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
capde06 Posté(e) le 14 octobre 2009 Auteur Posté(e) le 14 octobre 2009 la je dit bravo patrickt'es au top ca marche nickel je te remercie Vous fîtes ce que vous pûtes et vous m'épatâtes !!!!
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