Aller au contenu

besoin d\'aide


capde06

Messages recommandés

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 multiple

je n'arrive pas a lire ou modifier les attributs

pouvez 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 multiple

depuis des programmes lisp

 

 

 

on ne sais jamais

voici les étiquettes que j'utilise

http://dl.free.fr/vCzbwdX2o

Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

salut patrick

dabord merci

cette fonction marche très bien sur un bloc avec attribut simple

mais pas dans mon cas

le bloc dépend d'une étiquette multiple

command LIGNEDEREPMULT

regarde le lien du 1er message

tu as un exemple

 

 

Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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 !!!!

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é