Comment créer des routines LISP pour la configuration du dessin.
Lisp BricsCAD
Migration de AutoCAD®
Lors de votre migration vers BricsCAD, vous constaterez qu'il n'y a pratiquement aucune différence entre LISP BricsCAD et tout autre LISP. 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, examinons la configuration et le lancement de vos programmes existants dans BricsCAD.
Si vous lancez automatiquement vos programmes en utilisant Acad.lsp ou Acaddoc.lsp, vous devez les renommer respectivement on_start.LSP ou on_doc_load.LSP. La meilleure solution est d'utiliser on_doc_load.lsp, plutôt qu'on_start.lsp.
Panneau Paramètres de BricsCAD
Pour activer le lancement automatique de votre programme, réglez la variable système ACADLSPASDOC sur 1 ou activez simplement l'option dans Paramètres / Options du programme / Système :
Il est également recommandé de prendre un peu de temps pour vous familiariser avec la boîte de dialogue Paramètres dans BricsCAD, car certains paramètres et outils sont spécifiques à l'environnement BricsCAD.
L'étape suivante dans la boîte de dialogue Paramètres serait d'ajouter vos dossiers de support au chemin de recherche des fichiers, qui se trouve dans Paramètres / Options de 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 conseillé d'utiliser la fonction findfile pour vérifier l'existence du fichier avant de poursuivre vos commandes, comme dans la méthode ci-dessous :
C'est l'une des méthodes que vous pouvez utiliser pour demander le chargement de vos fonctions dans le fichier on_doc_load.lsp :
C'est l'une des méthodes que vous pouvez utiliser pour demander le chargement de vos fonctions dans le fichier on_start.lsp :
La commande DEFUN (DEfine FUNction) porte le même nom que la fonction contenue dans votre fichier on_doc_load.lsp et cette fonction redéfinit la fonction appelante lorsqu'elle est lancée.
Routine lisp de configuration du 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 de cette routine de configuration du dessin aurait pu être entrée sur la ligne de commande à l'adresse BricsCAD. En les intégrant dans une routine Lisp, la fonction de définition defun(define function) permet d'appeler la routine de configuration du dessin à partir d'un menu ou en entrant son nom sur la ligne de commande BricsCAD.
Si vous n'incluez pas defun, le programme s'exécutera une fois, lorsque vous le chargerez par son nom de fichier. Si vous utilisez defun et chargez cette routine dans votre LSP, la fonction devient disponible à tout moment si vous entrez son nom : mysetup.
Les tirets qui précèdent les noms de commande (par exemple, -layer et -purge) sont utilisés pour éviter le lancement des boîtes de dialogue des commandes.
Remarque : Utilisez toujours les noms des commandes et les options en anglais pour éviter les échecs sur les versions de BricsCAD traduites.
Une bonne pratique lors de l'ouverture de fichiers provenant d'autres collaborateur est d'exécuter un Contrôle suivi d'une Purge pour supprimer tous les éléments inutilisés.
La commande Purger pourrait être exécutée avec l'option Automatique pour supprimer les objets imbriqués. Voir l'exemple ci-dessous :
(commande -PURGER > automatique)
Remarque : La purge est effectuée avant d'ajouter les nouveaux calques vides, car ils seraient supprimés si nous le faisions après.
Les appels de commande pour le réglage des calques pourraient être combinés en une seule commande, mais il est plus facile à lire lorsque chaque ligne est indépendante.
La fonction setvar permet de fixer une variable système à une valeur donnée, par exemple paramètres de style pour les cotes et le texte, les paramètres d'unité, etc.
Le réglage maxsort a été introduit pour deux raisons :
Maxsort contrôle le nombre maximum d'entrées de la boîte de dialogue qui seront triées.
La valeur par défaut de maxsort est 1 000. Avec les ordinateurs d'aujourd'hui et les fichiers de projet les plus volumineux, ce nombre peut être trop faible.
Si vous ouvrez des dessins dont les noms de calques ne sont pas triés par ordre alphabétique, la valeur par défaut de maxsort peut en être la cause.
Un outil de création de calques (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 calques à 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 vous recherchez d'abord dans le répertoire actuel, puis séquentiellement à travers vos dossiers de support définis pour trouver le fichier Layers.txt. Vous pouvez placer votre fichier texte de configuration de calque par défaut dans le chemin de support 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