Comment puis-je m’assurer que mes programmes AutoLISP ne plantent pas ou ne réinitialisent pas les propriétés d’objets existants lorsque j’essaie de créer des calques, styles ou blocs dans AutoCAD ? Je cherche une méthode fiable pour vérifier si un objet est déjà présent avant de le manipuler.
Pour écrire des programmes AutoLISP « intelligents » et éviter les erreurs courantes lors de la création d’objets, il est fondamental d’utiliser la fonction (tblsearch). Cette fonction permet de vérifier l’existence d’une définition d’objet (calque, style, bloc, etc.) dans les tables d’AutoCAD avant toute action, garantissant ainsi la robustesse de vos scripts.
Voici la démarche pour l’utiliser efficacement :
-
Comprendre le concept des « Tables » AutoCAD : Imaginez qu’AutoCAD organise ses définitions d’objets dans des « armoires » spécifiques, appelées Tables. Chaque table est étiquetée (ex: « LAYER » pour les calques, « STYLE » pour les styles de texte, « BLOCK » pour les définitions de blocs). La fonction
(tblsearch)sert à « ouvrir » une armoire et à vérifier si un « dossier » (l’objet recherché) existe. -
Maîtriser la Syntaxe de
(tblsearch):- Argument 1 : Le type de table à interroger, toujours entre guillemets (ex:
"LAYER","BLOCK","LTYPE"). - Argument 2 : Le nom de l’objet que vous recherchez, également entre guillemets (ex:
"Mur","Standard").
- Argument 1 : Le type de table à interroger, toujours entre guillemets (ex:
-
Interpréter le Résultat de la fonction :
- Si l’objet N’EXISTE PAS,
(tblsearch)renvoienil(rien/vide). - Si l’objet EXISTE, elle renvoie une liste de données (la « carte d’identité » de l’objet, contenant ses propriétés).
- Si l’objet N’EXISTE PAS,
-
Exemple Concret : Créer un calque sans erreur :
Pour créer un calque nommé « PROJET » uniquement s’il n’existe pas déjà, évitant ainsi de réinitialiser ses propriétés ou de bloquer le script, utilisez le code LISP suivant :(if (not (tblsearch "LAYER" "PROJET")) (command "-CALQUE" "N" "PROJET" "C" "7" "PROJET" "") )- Explication : Le
(if (not ...))vérifie si(tblsearch)renvoienil(c’est-à-dire si le calque « PROJET » n’est pas trouvé). Si c’est le cas, la commande AutoCAD"-CALQUE"est exécutée pour créer le nouveau calque.
- Explication : Le
-
Pour aller plus loin : Lire les données d’un objet existant :
Lorsque(tblsearch)trouve un objet, la liste de données qu’elle renvoie contient des informations précieuses. Par exemple, pour un calque, vous pouvez obtenir son nom, sa couleur, son état, etc. Tapez ceci dans la ligne de commande AutoCAD (avec les parenthèses) :(tblsearch "LAYER" "0")AutoCAD vous répondra une liste similaire à
((-1 . <Nom d'entité: 7ef82f28>) (0 . "LAYER") (2 . "0") (70 . 0) (62 . 256) (6 . "CONTINUOUS"))où(2 . "0")est le nom,(62 . 256)la couleur (256 = ParCalque), etc. -
Tables accessibles via
(tblsearch):
Il existe 9 tables principales que(tblsearch)peut interroger. Les plus courantes sont :"LAYER": Les Calques."STYLE": Les Styles de Texte."BLOCK": Les Définitions de Blocs (attention, il s’agit du « moule » du bloc, pas des insertions de blocs dans le dessin)."LTYPE": Les Types de Ligne."DIMSTYLE": Les Styles de Cote.
Les tables moins courantes incluent"UCS"(SCU enregistrés),"VIEW"(Vues enregistrées),"APPID"(ID d’Applications pour les XData), et"VPORT"(Configurations de Fenêtres).
-
Le Piège à éviter : Les « Grands Absents » :
tblsearchne peut pas trouver tous les types d’objets. Les éléments plus modernes d’AutoCAD, qui n’existaient pas dans les versions anciennes (avant R12), sont souvent stockés dans des Dictionnaires et non dans des Tables. Pour ces objets, vous devrez utiliser la fonction(dictsearch).(tblsearch)ne trouvera PAS :"LAYOUT": Les Présentations (onglets)."GROUP": Les Groupes."MATERIAL": Les Matériaux de rendu."MLINE": Les styles de Multilignes.
En résumé, utilisez systématiquement (tblsearch) avant de créer ou de modifier des objets comme les calques, styles ou blocs pour vérifier leur existence et ainsi éviter les erreurs, les réinitialisations indésirables et rendre vos programmes AutoLISP beaucoup plus fiables.