Lisp

Comment créer des routines LISP pour la configuration du dessin.

BricsCAD Lisp

Migration depuis AutoCAD

Lorsque vous êtes prêt à migrer, vous constaterez qu'il n'y a pratiquement aucune différence entre BricsCAD LISP et AutreLISP. Votre code se charge et s’exécute, et la fonctionnalité est identique. Les principales différences lors du "portage" de vos applications seront quelques étapes de configuration mineures, la structure de la ligne de commande et éventuellement les emplacements des fichiers. Pour commencer, passons en revue la configuration et le lancement de vos programmes existants dans BricsCAD.

Si vous lancez automatiquement vos programmes avec Acad.lsp ou Acaddoc.lsp, vous devrez les renommer en on_start.lsp ou on_doc_load.lsp respectivement. La meilleure solution est d’utiliser on_doc_load.lsp, plutôt que on_start.lsp.

Panneau des paramètres BricsCAD
Pour activer le lancement automatique de votre programme, définissez la variable système ACADLSPASDOC sur 1 ou basculez simplement l’option dans Paramètres / Options du programme /système :
Il est également recommandé de passer un peu de temps à vous familiariser avec le menu Options/Réglage dans BricsCAD, car il y a des paramètres et des options spécifiques à l'environnement BricsCAD.
La prochaine étape dans la boîte de dialogue des paramètres consistera à ajouter vos dossiers de support au chemin de recherche de fichiers, qui se trouve dans Paramètres / Options du programme / Fichiers:
Il est recommandé d’utiliser les chemins de support ajoutés de la manière ci-dessus et/ou situés à un niveau sous le dossier de projet en cours. Il est recommandé d'utiliser une fonction findfile pour valider l'existence du fichier avant de poursuivre vos commandes, comme dans la méthode ci-dessous :
(if (findfile "custom-code.lsp") (load "custom-code")) 
Il s'agit de l'une des méthodes que vous pouvez utiliser pour charger vos fonctions dans le fichier on_doc_load.lsp :

Il s'agit de l'une des méthodes que vous pouvez utiliser pour charger vos fonctions dans le fichier on_start.lsp :

La commande DEFUN (DEfine FUNction) porte le même nom que la fonction de votre on_doc_load.lsp et cette fonction redéfinit la fonction appelante lorsqu’elle est lancée.

Routines Lisp de configuration de dessin pour BricsCAD

Exemple de code
La routine de configuration de dessin simple ci-dessous peut être adaptée à vos besoins avec un minimum de modifications.
(defun C:MYSETUP ( / )                    ;define the command line function "mysetup"
  (setvar "cmdecho" 0)
  (command "_audit" "_y")                 ;audit current drawing
  (command "_-purge" "_all" "*" "_n")     ;purge all unused styles, etc
  (command "_-layer" "_m" "1" "_c" "1" "" "")  ; create layer "1" color "1"
  (command "_-layer" "_m" "2" "_c" "2" "" "")
  (command "_-layer" "_m" "3" "_c" "3" "" "")
  (command "_-layer" "_m" "4" "_c" "4" "" "")
  (command "_viewres" "_y" "20000")        ;set view resolution to maximum
  (setvar "filedia" 1)                     ;turn file dialogs on
  (setvar "attdia" 1)                      ;turn attribute dialogs on
  (setvar "attreq" 1)                      ;enable attribute editing on placement
  (setvar "cecolor" "bylayer")             ;set current color bylayer
  (setvar "clayer" "0")                    ;set current layer to "0"
  (setvar "maxsort" 5000)                  ;set maximum layer sort to 5,000
  (command "_zoom" "_e" "_zoom" "0.95x")   ;zoom extents, then out a little
  (setvar "cmdecho" 1)
  (princ)
)
Chaque ligne individuelle de cette routine de configuration de dessin aurait pu être tapée sur la ligne de commande dans BricsCAD. En les enveloppant dans une routine Lisp, le defun (définir la fonction) rend la routine de configuration de dessin « appelable » à partir d’un menu ou en tapant son nom sur la ligne de commande BricsCAD .

Si vous n'incluez pas defun, le programme s'exécute une fois, lorsque vous le chargez par son nom de fichier. L'utilisation de defun et le chargement de cette routine dans votre lsp rendront la fonction disponible à tout moment en saisissant son nom de fonction : mysetup.

Les commandes avec les tirets précédents (par exemple, -layer et -purge) sont utilisés pour empêcher le lancement des boîtes de dialogue de la commande.

Note: Utilisez toujours des noms de commande et d'options en anglais pour éviter les échecs sur les versions BricsCAD traduites (non anglaises).

Une bonne pratique lors de l’ouverture de fichiers à partir d’autres personnes consiste à exécuter un audit suivi d’un purge pour supprimer tous les éléments inutilisés.

commande Purger peut être exécutée plusieurs fois pour supprimer des éléments imbriqués. Voir l’exemple ci-dessous :

(repeat 3 (command "-purge" "all" "*" "n"))
Note: Purger est fait avant d’ajouter les nouveaux calques vides, car ils seraient supprimés si nous le faisions après.

La commande appelle à définir des couches pouvant être combinées en une seule instruction de commande, mais il est plus facile à lire lorsque chaque ligne est seule.

Le setvar appelle à définir une variable système sur une valeur spécifiée, par exemple paramètres de style pour les dimensions et le texte, les paramètres d'unité, etc.

Le paramètre maxsort a été introduit pour deux raisons.
  1. Trier max contrôle le nombre maximal d'entrées de la boîte de dialogue qui seront triées.
  2. La valeur par défaut pour maxsort est 1000. Avec les ordinateurs d'aujourd'hui et les fichiers de projet les plus volumineux, ce nombre peut être trop faible.
Si vous ouvrez des plans où les noms de couches ne seront pas triés dans l'ordre alphabétique, la valeur par défaut maxsort pourrait être la raison.
Un Layer Maker plus polyvalent pour votre routine de configuration de dessin
L’exemple suivant peut être ajouté à votre version de mysetup.lsp. En créant un simple fichier texte « Layers.txt » avec un éditeur comme Notepad, vous pouvez ajouter une liste de noms de couches à créer lors de l'exécution de la routine. Il s’agit d’une alternative au processus codé en dur illustré ci-dessus. En utilisant la fonction findfile, BricsCAD effectuera d'abord une recherche dans le répertoire actuel, puis en utilisant séquentiellement vos dossiers d'assistance définis pour trouver le fichier Layers.txt. Vous pouvez placer votre fichier texte de configuration de couche par défaut dans le chemin d'assistance et y placer d'autres versions dans des dossiers de projet individuels.

(if (not (findfile "Layers.txt"))                   ;"not" = looking for no result from findfile
(alert "Can't find Layers.txt!")                    ;No file? Yell at the user and exit!
(progn                                              ;Otherwise, do the stuff in the progn group
(setq layerfile (open (findfile "Layers.txt") "r")) ;open layers.txt to "read"
(while (setq layername (read-line layerfile))       ;while reading each line, store the text to layername
(command "-layer" "m" layername "")                 ;make layer with the layername
)                                                   ;end the while loop
(close layerfile)                                   ;close the Layers.txt file
)                                                   ;end the progn
)                                                   ;end the if