Aller au contenu

Routine Visible/Invisible sur Attribut


Messages recommandés

Posté(e)

 

Hello Camarades

 

Je suis "presque" sur d'avoir deja vu ce genre de routine !

mais je ne la retrouve pas ... :o

( ou alors elle jouait seulement avec le type de visibilite "normale" d'un attribut ! )

 

Est il possible de basculer le fameux code DXF d'Invisibilite sur un simple attribut ???

 

Si OUI, je desire SVP une routine avec 2 commandes ATTINVI et ATTVISI

ATTINVI : clic sur UN attribut, il devient INVISIBLE

ATTVISI : clic sur un bloc, tous les attributs rebasculent en VISIBLE

Attention: je parle ICI du code d'INVISIBILITE ! :D

 

Si NON - Autre routine qui m'interesse :

 

ATTINVI : clic sur un attribut AutoCAD visible, il passe en mode invisible

et on fait un BATTMAN

 

ATTVISI : clic sur un bloc, tous les attributs repassent en mode visible

et on fait un BATTMAN

 

Voyez vous ce que je veux dire ?

 

Merci d'avance, Le Decapode

 

 

Autodesk Expert Elite Team

Posté(e)

Bonsoir,

(defun c:AttInvi (/ e eobj)
 (vl-load-com)
 (setq e (car (nentsel)))
 (if (= (cdr (assoc 0 (entget e))) "ATTRIB")
   (progn
     (setq eobj (vlax-ename->vla-object e))
     (vla-put-visible eobj :vlax-false)
   )
   (alert "Pas un attribut")
 )
 (princ)
)


(defun c:AttVisi (/ e eobj LATT ATT)
 (vl-load-com)
 (setq e (car (entsel)))
 (if (= (cdr (assoc 0 (entget e))) "INSERT")
   (progn
     (setq eobj (vlax-ename->vla-object e))
     (setq LATT (vlax-invoke eobj 'getAttributes))
     (foreach ATT LATT
       (setq REP (vla-put-visible ATT :vlax-true))
     )
   )
   (alert "Pas un bloc")
 )
 (princ)
) 

 

Amicalement

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

 

Hello Zebulon

 

Merci beaucoup, ca marche Nickel-Chrome ! :)

 

Neanmoins je suis aussi preneur SVP de la routine evoquee "en secours" !?

 

B_ATT_INVI : bascule l'attribut selectionne du mode visible en invisible

B_ATT_VISI : bascule tous les attributs du bloc selectionne en mode visible

 

Ensuite je fais un BATTMAN ... :P

 

Attention : je parle ICI du mode Visible / Invisible NORMAL des attributs

et non pas du code d'INVISIBILITE special DXF (60 ou 70 je crois)

 

Merci d'avance de votre aide, Le Decapode (Le Crabe Invisible)

 

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Les routines de zebulon_ agissent sur la propriété "Visible" (DXF 60) de la référence d'attribut sélectionnée.

 

Pour le mode "Invisible" des attributs, il faut agir sur la propriété du même nom de la définition d'attribut, toutes les références insérées devraient être mises à jour.

 

Exemple :

 

(defun c:AttInvi (/ att blk name tag)
 (vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (if (and
       (setq att (car (nentsel "\nSélectionner un attribut: ")))
       (setq att (vlax-ename->vla-object att))
       (= (vla-get-ObjectName att) "AcDbAttribute")
     )
   (progn
     (setq blk  (vla-ObjectIdToObject acdoc (vla-get-OwnerId att))
           name (if (vlax-property-available-p blk "EffeciveName")
                  (vla-get-EffectiveName blk)
                  (vla-get-Name blk)
                )
           tag  (vla-get-TagString att)
     )
     (vlax-for o (vla-item (vla-get-Blocks acdoc) name)
       (if (and (= (vla-get-ObjectName o) "AcDbAttributeDefinition")
                (= (vla-get-TagString o) tag)
           )
         (vla-put-Invisible o :vlax-true)
       )
     )
     (vl-cmdf "_.attsync" "_n" name)
   )
 )
 (princ)
)

(defun c:AttVisi (/ blk name tag)
 (vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (if (and
       (setq blk (car (entsel "\nSélectionner un bloc: ")))
       (setq blk (vlax-ename->vla-object blk))
       (= (vla-get-ObjectName blk) "AcDbBlockReference")
     )
   (progn
     (setq name (if (vlax-property-available-p blk "EffeciveName")
                  (vla-get-EffectiveName blk)
                  (vla-get-Name blk)
                )
     )
     (vlax-for o (vla-item (vla-get-Blocks acdoc) name)
       (if (= (vla-get-ObjectName o) "AcDbAttributeDefinition")
         (vla-put-Invisible o :vlax-false)
       )
     )
     (vl-cmdf "_.attsync" "_n" name)
   )
 )
 (princ)
)

 

PS : Je ne comprends pas bien la demande pour BATTMAN, mais il suffit peut-être de rajouter après (vl-cmdf "_.attsync" "_n" name) l'expression :

(vl-cmdf "_.battman)

 

PPS : À propos de la visibilité des entités, je me suis amusé à faire un truc en C#. Je l'ai posté ici parce que le site permet le téléchargement de fichier et affiche mieux les codes.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Je ne comprends pas bien la demande pour BATTMAN

 

je pense que lecrabe espérait trouver une commande battman en ligne de commande, ce qui aurait permis d'intervenir sur les modes des attributs d'un bloc sans passer en revue la définition du bloc via vlisp.

 

Amicalement

Vincent

 

 

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

 

Hello Zebulon & Gilles

 

Merci beaucoup pour vos routines qui marchent bien ! :)

 

Gilles, j'ai renomme tes routines en BAttInvi et BAttVisi ;)

 

C amusant car la commande BAttVisi de Gilles me remet TOUS les attributs en VISIBLE

meme ceux que j'ai caches avec la routine AttInvi de Zebulon qui agit sur le code DXF 60 !

 

Pour BATTMAN , je pensais que la manip serait necessaire mais en fait du fait de l'inclusion du ATTSYNC dans la routine de Gilles, c OK ! :P

 

Encore merci pour ces super-routines, Le Decapode

 

Autodesk Expert Elite Team

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é