J’essaie de modifier les propriétés d’éléments de table (comme les calques ou les styles de texte) en AutoLISP, mais (tblsearch) ne me permet que de lire les informations. Comment puis-je obtenir l’objet réel pour le modifier ?
Pour modifier les propriétés d’un élément de table AutoCAD (comme un calque, un style de texte, etc.) via AutoLISP, il est essentiel d’obtenir son adresse mémoire réelle à l’aide de la fonction (tblobjname), car (tblsearch) ne fournit qu’une copie statique des propriétés.
-
Comprendre la distinction entre
(tblsearch)et(tblobjname):(tblsearch): Agit comme une « carte de visite ». Elle renvoie une liste de propriétés de l’élément (par exemple, le nom et la couleur d’un calque). Cette liste est une copie statique ; la modifier n’affecte pas l’objet réel dans le dessin AutoCAD.(tblobjname): Agit comme une « poignée de main » avec l’objet réel. Elle renvoie l’adresse mémoire (ou nom d’entité) de l’élément de table. C’est ce nom d’entité qui permet d’interagir directement avec l’objet et de le modifier.
-
Utiliser la syntaxe de
(tblobjname):- La syntaxe de
(tblobjname)est simple et identique à celle de(tblsearch):(tblobjname "NOM_TABLE" "NOM_ELEMENT"). - Par exemple, pour obtenir l’adresse mémoire du calque « 0 », vous utiliseriez :
(tblobjname "LAYER" "0").
- La syntaxe de
-
Interpréter le résultat :
- Lorsque vous exécutez
(tblsearch "LAYER" "0"), vous obtenez une liste de propriétés lisible (ex:((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "CONTINUOUS"))). - Lorsque vous exécutez
(tblobjname "LAYER" "0"), vous obtenez un nom d’entité cryptique (ex:<Nom d'entité: 7ffff7c0060>). Ce code est le « sésame » que vous passerez aux fonctions de modification AutoLISP ou Visual LISP (commeentmodouvla-put-color) pour appliquer des changements à l’objet réel.
- Lorsque vous exécutez
-
Exemple de démonstration (code AutoLISP) :
Le code suivant, à exécuter dans la ligne de commande d’AutoCAD, illustre la différence de retour entre les deux fonctions :(defun c:TestTblObjName () (princ "\nRecherche du calque \"0\" avec tblsearch : ") (setq carte-visite (tblsearch "LAYER" "0")) (princ carte-visite) ; Affiche la liste des propriétés (princ "\nRecherche du calque \"0\" avec tblobjname : ") (setq personne-reelle (tblobjname "LAYER" "0")) (princ personne-reelle) ; Affiche le nom d'entité (princ) )Après avoir chargé et exécuté
(c:TestTblObjName), vous verrez dans la ligne de commande les deux types de retours, confirmant que(tblobjname)fournit l’accès à l’objet modifiable.