Aller au contenu

Changer état visibilité dans un bloc dynamique avec un attribut


breakthru

Messages recommandés

Bonjour à tous,

 

Je cherche à savoir s'il est possible de changer l'état de visibilité d'objets dans un bloc dynamique depuis un attribut.

 

Je m'explique, avec un exemple très simple car au final mon bloc à une utilité :

 

Le bloc est un carré, et un paramètre de visibilité permet de changer la couleur (hachures solides) du carré. Dans le bloc, j'ai un attribut "Couleur" que je renseigne. Le truc serait qu'en mettant "Rouge" par exemple dans l'attribut, le paramètre de visibilité change l'état en "Rouge".

 

Au final, j'aurai ce bloc utilisé plus de 700 fois dans mon fichier. Avec le menu express, je peux importer/exporter les paramètres d'attribut du bloc. Un sous-traitant me définira la couleur du bloc (pour faire simple ...) et une fois ceci fait, je ré-injecte les valeurs dans l'attribut "Couleur". Mais après, il faudra que l'état de visibilité change ...

 

J'ai trouvé un lisp sur un forum US qui fonctionne très bien pour pratiquement la même chose, mais sur des paramètres de distance. Et comme je ne connais rien au lisp, je n'arrive pas à le modifier pour qu'il fasse la même chose pour un paramètre de visibilité ..

 

Le voici :

 

(defun c:updateParameters ( / dynPropertyList tempSelectionSet i blkObject item attObjList newValue parmName dynmBlksList)

 

;>>Change dynPropertyList to suit, based on dynamic block properties

;1st item = Attribute Tag

;2nd item = Corresponding Distance Label (Unique name)

;((attribute_Tag_01 . distance_label_name_01)

; (attribute_Tag_02 . distance_label_name_02)....)

(setq dynPropertyList

'(("A" . "d1") ;Enter attribute name and Dynamic property name

("B" . "d2")

("C" . "d3")

)

)

 

(if

 

(setq tempSelectionSet (ssget '((0 . "Insert"))))

 

(progn

 

(setq i 0)

 

(repeat

(sslength tempSelectionSet)

 

(setq blkObject (vlax-ename->vla-object (ssname tempSelectionSet i))

i (1+ i))

(if

(and

(= (vla-get-HasAttributes blkObject) :vlax-true)

(= ( vla-get-IsDynamicBlock blkObject) :vlax-true)

)

 

(progn

(setq attObjList (vlax-safearray->list (vlax-variant-value (vla-getattributes blkObject))))

 

(foreach <att> attObjList

 

(if

(setq item (assoc (vla-get-TagString <att>) dynPropertyList))

(progn

(setq newValue (atof (vla-get-TextString <att>))

parmName (cdr item)

dynmBlksList (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties blkObject))))

 

(foreach <dyn> dynmBlksList

 

(if

(= parmName (vla-get-PropertyName <dyn>))

(vla-put-Value <dyn> newValue))

))))))))))

 

D'avance, merci beaucoup à ceux qui pourront m'aider ! :-)

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é