Aller au contenu

besoin d\'aide


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

cool

ca marche

mais peut on lire et modifier en choisissant le non de l'étiquette

code dxf 2

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

Posté(e)

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

Posté(e)

bravo Patrick

j'ai beaucoup cherché a la faire je n'y suis jamais arrivé

je vais modifier pour en faire une fonction

et je vais pouvoir l'intégrer a mon programme de topo

encore merci

 

Vous fîtes ce que vous pûtes

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

Posté(e)

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

Posté(e)

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

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é