Comment résoudre le problème des attributs de bloc qui sont détectés par AutoCAD (via vla-get-hasattributes) mais n’apparaissent pas ou ne sont pas éditables dans l’éditeur de blocs (BEDIT), et comment les réintégrer ou les supprimer correctement des références ?
Ce problème survient fréquemment lorsque des définitions d’attributs ont été supprimées d’un bloc, mais que les références d’attributs correspondantes dans les insertions de bloc n’ont pas été correctement synchronisées (par exemple, via la commande ATTSYNC). AutoCAD détecte alors des attributs dans les références de bloc qui n’ont plus de définition valide dans le bloc lui-même, créant une incohérence.
Voici deux approches pour résoudre ce problème, selon que vous souhaitiez nettoyer les références ou réintégrer les attributs :
1. Nettoyage des références d’attributs orphelines (Solution LISP)
Si l’objectif est de supprimer les attributs fantômes des références de bloc sans les réintégrer dans la définition, un programme LISP peut corriger les références de bloc en supprimant les attributs qui n’ont plus de définition correspondante. Cette solution est utile pour nettoyer un dessin de ces incohérences. Elle nécessite une version complète d’AutoCAD (pas LT).
Procédure :
- Charger le LISP : Copiez le code suivant dans un fichier
.LSP(FixBadAttBlocks.lspde BeekeeC) .
(defun c:FixBadAttBlocks ( / gettags bkc bln doc lst tmp )
(defun gettags ( def / rtn )
(vlax-for obj def
(if (= « AcDbAttributeDefinition » (vla-get-objectname obj))
(setq rtn (cons (strcase (vla-get-tagstring obj)) rtn))
)
)
rtn
)
(vl-load-com)
(setq
doc (vla-get-activedocument (vlax-get-acad-object))
bkc (vla-get-blocks doc)
)
(vlax-for blk bkc
(if (= :vlax-false (vla-get-isxref blk))
(vlax-for obj blk
(if
(and
(= « AcDbBlockReference » (vla-get-objectname obj))
(= :vlax-true (vla-get-hasattributes obj))
(or
(setq tmp (assoc (setq bln (vla-get-name obj)) lst))
(and
(setq tmp (cons bln (gettags (vla-item bkc bln))))
(setq lst (cons tmp lst))
)
)
)
(foreach att (vlax-invoke obj 'getattributes)
(or
(member (strcase (vla-get-tagstring att)) (cdr tmp))
(and
(vlax-write-enabled-p att)
(vla-delete att)
)
)
)
)
)
)
)
(vla-regen doc acallviewports)
(princ)
)
- Exécuter la commande : Tapez
APPLOADpour charger le fichier LISP, puis tapezFixBadAttBlockssur la ligne de commande et appuyez sur Entrée.
Ce programme parcourt toutes les références de bloc et supprime les attributs qui n’ont pas de définition correspondante dans le bloc. Il ne recrée pas les définitions d’attributs manquantes dans le bloc lui-même.
2. Réintégration et synchronisation des attributs (Procédure Manuelle)
Si l’objectif est de récupérer ou de réintégrer les attributs manquants dans la définition du bloc pour pouvoir les éditer et les utiliser, la procédure suivante est nécessaire :
- Éditer le bloc : Ouvrez le bloc concerné dans l’éditeur de blocs. Pour ce faire, double-cliquez sur une insertion du bloc ou utilisez la commande
BEDIT(ouMODIFBLOC). - Créer les définitions d’attributs manquantes :
- Utilisez la commande
ATTDEF(ouDEFATT) pour créer de nouvelles définitions d’attributs. Il est crucial de leur donner les mêmes étiquettes (tags) que celles des attributs que vous souhaitez récupérer ou qui sont détectés comme manquants. - Si des attributs apparaissent en rouge dans l’éditeur de blocs, cela indique généralement des étiquettes d’attributs en doublon dans la définition du bloc. Si le comportement original du bloc impliquait des attributs avec la même étiquette (ce qui est rare mais possible dans des cas spécifiques), vous devrez recréer ces doublons. Sinon, assurez-vous que chaque étiquette est unique.
- Utilisez la commande
- Enregistrer le bloc : Une fois toutes les définitions d’attributs recréées, fermez l’éditeur de blocs et enregistrez les modifications (
BSAVEouFERMERBLOCpuisOUI). - Synchroniser les attributs : Exécutez la commande
ATTSYNC(ouSYNCHROATT) et sélectionnez le bloc que vous venez de modifier. Cela forcera toutes les références de ce bloc dans le dessin à se mettre à jour avec la nouvelle définition d’attributs, rendant les attributs visibles et éditables.
Bonnes Pratiques
Il est crucial d’utiliser systématiquement la commande ATTSYNC après toute modification des définitions d’attributs d’un bloc (ajout, suppression, modification de propriétés) pour assurer la cohérence entre la définition du bloc et toutes ses références insérées dans le dessin. Cela prévient l’apparition de ces attributs fantômes ou manquants.