Chargez les routines AutoLISP au démarrage et exécutez des commandes ou des fonctions à des moments spécifiques au cours d'une session de dessin.
Les produits basés sur AutoCAD et AutoCAD LT chargent automatiquement le contenu de trois fichiers définissables par l'utilisateur :
Fichier définissable par l'utilisateur | Windows | Mac OS | ||
---|---|---|---|---|
AutoCAD | AutoCAD LT | AutoCAD | AutoCAD LT | |
acad.lsp | ✓ | -- | ✓ | -- |
acaddoc.lsp | ✓ | -- | ✓ | -- |
acadlt.lsp | -- | ✓ | -- | -- |
acadltdoc.lsp | -- | ✓ | -- | -- |
Fichier MNL accompagné du fichier de personnalisation actuel | ✓ | -- | ✓ | -- |
Par défaut, le fichier acad.lsp ou acadlt.lsp est chargé une seule fois, au démarrage du produit, tandis que le fichier acaddoc.lsp ou acadltdoc.lsp est chargé avec chaque document (ou dessin). Cela vous permet d'associer le chargement du fichier acad.lsp ou acadlt.lsp au démarrage de l'application, et celui du fichier acaddoc.lsp ou acadltdoc.lsp au démarrage du document (ou du dessin). Vous pouvez changer la méthode par défaut de chargement de ces fichiers de démarrage en modifiant la valeur de la variable système ACADLSPASDOC.
Si l'un de ces fichiers définit une fonction du type spécial S::STARTUP, cette routine s'exécute immédiatement une fois le dessin entièrement initialisé. Par ailleurs, la commande APPLOAD fournit l'option Applications lancées au démarrage qui charge les applications spécifiées sans qu'il soit nécessaire de modifier des fichiers.
Les fichiers de démarrage acad.lsp ou acadlt.lsp et acaddoc.lsp ou acadltdoc.lsp ne sont pas fournis avec le produit. Il appartient à l'utilisateur de les créer et de les gérer.
Lorsque vous chargez un fichier AutoLISP, les définitions de commande du fichier sont chargées en mémoire, que vous utilisiez ou non ces commandes. La fonction AutoLISP autoload permet d'utiliser une commande sans qu'il soit nécessaire de charger la totalité de la routine en mémoire. L'ajout du code ci-dessous au fichier acaddoc.lsp ou acadltdoc.lsp permet de charger automatiquement les commandes CMD1, CMD2 et CMD3 à partir du fichier cmds.lsp, de même que la commande NEWCMD à partir du fichier newcmd.lsp.
(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) (autoload "NEWCMD" '("NEWCMD"))
La première fois que vous entrez une commande automatiquement chargée sur la ligne de commande, AutoLISP charge la totalité de la définition de la commande à partir du fichier associé. AutoLISP fournit également la fonction autoarxload pour les applications ObjectARX.
Vous pouvez créer un fichier acad.lsp ou acadlt.lsp si vous utilisez régulièrement certaines routines AutoLISP. Au démarrage d'AutoCAD, il recherche le chemin d'accès du fichier de support d'un fichier acad.lsp ou acadlt.lsp. S'il trouve un fichier acad.lsp ou acadlt.lsp, il le charge en mémoire.
Le fichier acad.lsp ou acadlt.lsp étant destiné aux routines de démarrage spécifiques des applications, toutes les fonctions et variables définies dans un fichier acad.lsp ou acadlt.lsp ne sont disponibles que dans le premier dessin. Vous souhaiterez peut-être déplacer les routines qui doivent être disponibles dans tous les documents de votre fichier acad.lsp ou acadlt.lsp vers le fichier acaddoc.lsp ou acadltdoc.lsp.
La fonctionnalité recommandée des fichiers acad.lsp ou acadlt.lsp et acaddoc.lsp ou acadltdoc.lsp peut être remplacée par la variable système ACADLSPASDOC. Si la variable système ACADLSPASDOC a la valeur 0 (valeur par défaut), le fichier acad.lsp ou acadlt.lsp n'est chargé qu'une seule fois : au démarrage de l'application. Si elle est définie sur 1, le fichier acad.lsp ou acadlt.lsp est rechargé lors de la création d'un dessin ou de l'ouverture d'un fichier de dessin existant.
Le fichier acad.lsp ou acadlt.lsp peut contenir du code AutoLISP pour une ou plusieurs routines, ou uniquement une série d'appels de la fonction load. La seconde méthode est préférable, car la modification est plus facile. Si vous enregistrez le code suivant dans un fichier acad.lsp ou acadlt.lsp, les fichiers mysessionapp1.lsp, databasesynch.lspet drawingmanager.lsp sont chargés à chaque démarrage du programme.
(load "mysessionapp1") (load "databasesynch") (load "drawingmanager")
Le fichier acaddoc.lsp ou acadltdoc.lsp est destiné à être associé à chaque initialisation de document (ou de dessin). Ce fichier facilite le chargement d'une bibliothèque de routines AutoLISP à chaque démarrage d'un nouveau dessin (ou ouverture d'un dessin existant).
À chaque ouverture d'un dessin, AutoCAD recherche un fichier acaddoc.lsp ou acadltdoc.lsp dans le chemin de la bibliothèque. S'il en trouve un, il le charge en mémoire. Le fichier acaddoc.lsp ou acadltdoc.lsp est toujours chargé avec chaque dessin indépendamment de la valeur de ACADLSPASDOC.
La plupart des utilisateurs disposent d'un fichier acaddoc.lsp ou acadltdoc.lsp unique pour toutes les routines AutoLISP basées sur des documents. Le produit recherche un fichier acaddoc.lsp ou acadltdoc.lsp selon l'ordre défini par le chemin de la bibliothèque ; par conséquent, grâce à cette fonctionnalité, vous pouvez, dans chaque répertoire de dessins, disposer d'un fichier acaddoc.lsp ou acadltdoc.lsp distinct permettant de charger des routines AutoLISP propres à certains types de dessin ou de tâche.
Le fichier acaddoc.lsp ou acadltdoc.lsp peut contenir du code AutoLISP pour une ou plusieurs routines, ou uniquement une série d'appels de la fonction load. La seconde méthode est préférable, car la modification est plus facile. Si vous enregistrez le code suivant dans un fichier acaddoc.lsp ou acadltdoc.lsp, les fichiers mydocumentapp1.lsp, build.lsp et counter.lsp sont chargés à chaque ouverture d'un nouveau document.
(load "mydocumentapp1") (load "build") (load "counter")
Lorsque le produit charge un fichier de personnalisation (CUI/CUIx), il recherche un fichier MNL portant un nom correspondant. S'il le trouve, il le charge en mémoire. Les fonctions AutoLISP indispensables à l'utilisation appropriée des éléments de l'interface utilisateur sont ainsi chargées.
Par exemple, si le produit charge un fichier de personnalisation nommé custom.cuix, il recherche un fichier nommé custom.mnl qui peut définir de nombreuses fonctions AutoLISP utilisées par les éléments de l'interface utilisateur dans le fichier de personnalisation. Le fichier MNL est chargé après le fichier acaddoc.lsp.
(command "menu" "newmenu") (princ "Newmenu utilities… Loaded.") (Princ)
Dans cet exemple, les appels de la fonction princ permettent d'afficher des messages d'état. La première utilisation de princ affiche le texte suivant sur la ligne de commande :
Utilitaires du nouveau menu... Chargé.
Le second appel de princ permet de quitter la fonction AutoLISP. Sans ce second appel de princ, le message serait affiché deux fois. Comme indiqué précédemment, vous pouvez, à titre préventif, inclure l'argument onfailure dans les appels de la fonction load.
Vous pouvez définir une fonction S::STARTUP pour effectuer toute opération de configuration une fois le dessin initialisé.
Les fichiers LISP de démarrage (acad.lsp ou acadlt.lsp, et acaddoc.lsp ou acadltdoc.lsp) sont tous chargés en mémoire avec les fichiers MNL chargés automatiquement avant que le dessin ne soit complètement initialisé. Généralement, cela ne pose pas de problème, sauf si vous souhaitez utiliser la fonction command, qui n'est réellement opérationnelle qu'après l'initialisation d'un dessin.
Si la fonction S::STARTUP définie par l'utilisateur figure dans un fichier acad.lsp ou acadlt.lsp, acaddoc.lsp ou acadltdoc.lsp, ou MNL, elle est appelée lorsque vous accédez à un nouveau dessin ou ouvrez un dessin existant. Par conséquent, vous pouvez inclure une définition de S::STARTUP dans le fichier de démarrage AutoLISP pour effectuer toute opération de configuration.
Par exemple, si vous souhaitez remplacer la commande HACHURES standard en ajoutant un message, puis en basculant vers la commande FHACH, utilisez un fichier acaddoc.lsp ou acadltdoc.lsp contenant la syntaxe suivante :
(defun C:HATCH ( ) (alert "Using the BHATCH command!") (princ "\nEnter OLDHATCH to get to real HATCH command.\n") (command "BHATCH") (princ) ) (defun C:OLDHATCH ( ) (command ".HATCH") (princ) ) (defun-q S::STARTUP ( ) (command "undefine" "hatch") (princ "\nRedefined HATCH to BHATCH!\n") )
Avant l'initialisation du dessin, les commandes HACHURES et OLDHATCH sont redéfinies avec la fonction defun. Après l'initialisation du dessin, la fonction S::STARTUP est appelée et la définition standard de HACHURES est non définie.
Une fonction S::STARTUP pouvant être définie en de nombreux endroits (un fichier acad.lsp ou acadlt.lsp, acaddoc.lsp ou acadltdoc.lsp, ou MNL, ou tout autre fichier AutoLISP chargé à partir de ces emplacements), il est possible de remplacer une fonction S::STARTUP précédemment définie.
L'exemple suivant illustre une méthode grâce à laquelle votre fonction de démarrage est opérationnelle avec d'autres fonctions.
(defun-q MYSTARTUP ( )
... votre fonction de démarrage ...
) (setq S::STARTUP (append S::STARTUP MYSTARTUP))
Le code précédent ajoute votre fonction de démarrage à celui d'une fonction S::STARTUP existante, puis redéfinit la fonction S::STARTUP afin d'inclure votre code de démarrage. Cela est opérationnel même si une fonction S::STARTUP existe déjà.