Aller au contenu

Creation étiquette d'attribut sur bloc dans Xref


Messages recommandés

Posté(e)

Bonjour, 

Je veux créer une étiquette qui, en cliquant sur le bloc qui se trouve dans la xref, trouvera l'attribut "ASSET_TAG" et l'affichera dans l'etiquette. 

Ce lisp marche sur les blocs en dur. Mais pas sur les blocs dans les Xref. 

Si l'attribut est vide l'etiquette indique "TAG_MISSING".

 

Pouvez vous m'aider ? 

 

(defun c:BNameLabel (/ obj lastentity ent attrib tagname attribvalue)
  (vl-load-com)
  (if (setq obj (car (entsel "\nSélectionnez le bloc : ")))
    (if (eq (cdr (assoc 0 (entget obj))) "INSERT")
      (progn
        (setq lastentity (entlast))
        (vl-cmdf "_.mleader" "_non" (trans (vlax-get (setq obj (vlax-ename->vla-object obj)) 'InsertionPoint) 0 1) PAUSE)
        (while (eq 1 (logand 1 (getvar 'CMDACTIVE))) (vl-cmdf ""))

        ;; Récupération des attributs du bloc
        (setq attrib (vlax-invoke obj 'GetAttributes))
        
        ;; Boucle sur chaque attribut pour trouver celui avec le tag spécifié
        (setq tagname "ASSET_TAG") ; Modifier "ASSET_TAG" par le tag de l'attribut que vous voulez récupérer
        (setq attribvalue nil)
        (foreach att attrib
          (if (eq (vlax-get att 'TagString) tagname)
            (setq attribvalue (vlax-get att 'TextString))
          )
        )

        ;; Mise à jour du texte du leader en fonction de la valeur de l'attribut
        (if (and attribvalue (not (equal lastentity (setq ent (entlast)))))
          (vla-put-textstring (vlax-ename->vla-object ent) attribvalue)
          (vla-put-textstring (vlax-ename->vla-object ent) "TAG_MISSING")
        )
        (if (and (equal attribvalue "") (not (equal lastentity (setq ent (entlast)))))
          (vla-put-textstring (vlax-ename->vla-object ent) "TAG_MISSING")
        )
      )
      (princ "\nObjet invalide !")
    )
  )
  (princ)
)
 

image.png.864db53f8e9319de2587bd0ae6a37f18.png

 

Posté(e)

Bonjour,

Si l'attribut du bloc est visible, c'est possible en cliquant dessus et faire un _ncopy.

Tu récupère un texte avec la valeur que tu cherche. (sans avoir besoin de l'etiquette).

Par contre, si l'attribut est invisible, c'est possible, mais beaucoup trop long sur des plans contenant beaucoup d'objet.,

car il faut chercher le bloc le plus proche de l'objet que tu ferais avec aussi un _ncopy.

_copy est une clé d'entrée.

Il faut faire des essais.

Sans un de tes plans en exemples nous ne pourrons pas t'aider en testant nos hypotheses.

Cordialement.

 

Posté(e)

Coucou,
Pour accéder aux objets dans une XREF, il faut utiliser (nentsel) et non (entsel). Le problème : (entsel) sélectionne un objet donc quand tu as un bloc cela renvoie l'ID du bloc et donc c'est simple de récupérer les infos du bloc (attribut par exemple) mais (nentsel) sélectionne un sous-objet donc dans le cas d'un bloc, si tu cliques sur une polyligne d'un bloc cela te renvoie les données de la polyligne et non ton bloc.
Donc soit il faut que ta sélection soit précise (clic sur l'attribut souhaité directement) et cela demande peu de modifications de programmation, soit il faut être capable de remonter les couches de sous-objets pour récupérer les bonnes valeurs, ce qui nécessite beaucoup plus de modifications et programmation complexe car il faut que ton programme fonctionne dans chaque cas (bloc en dur et/ou bloc dans xref..)

Bisous,
Luna

Posté(e)
Il y a 22 heures, Luna a dit :

clic sur l'attribut souhaité directement

Bonjour Luna,

Je vois qu'on arrive à la même conclusion,

c'est beaucoup plus simple si l'attribut est visible d'une manière ou une autre.

On peut imaginer une solution qui fasse apparaitre l'attribut temporairement pendant l'execution du lisp.

Mais il faut un plan en exemple.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é