A propos des routines AutoLISP de chargement automatique et d'exécution

 
 
 

Chargez les routines AutoLISP au démarrage d'AutoCAD et exécutez des commandes ou des fonctions à des moments spécifiques au cours d'une session de dessin.

AutoCAD charge automatiquement le contenu de trois fichiers définis par l'utilisateur : acad.lsp, acaddoc.lsp et le fichier MNL qui accompagne votre fichier de personnalisation courant.

Par défaut, le fichier acad.lsp n'est chargé qu'une seule fois, au démarrage d'AutoCAD, tandis que le fichier acaddoc.lsp est chargé avec chaque document (ou dessin). Ceci vous permet d'associer le chargement du fichier acad.lsp au démarrage de l'application et le fichier acaddoc.lsp avec le commencement 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 et acaddoc.lsp ne sont pas fournis avec AutoCAD. Il appartient à l'utilisateur de les créer et de les gérer.

Chargement automatique des commandes

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 suivant au fichier acaddoc.lsp permet de charger automatiquement les commandes CMD1, CMD2 et CMD3 à partir du fichier cmds.lsp, et 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. Voir autoload et autoarxload dans le document AutoLISP Reference.

Remarque Les fichiers de démarrage AutoLISP de même nom sont chargés en fonction de leur dateur Modification ; le fichier LSP détenant le dateur le plus récent est chargé, sauf si vous spécifiez un nom de fichier complet (extension comprise).

Le fichier ACAD.LSP

Vous pouvez créer un fichier acad.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. S'il trouve un fichier acad.lsp, il le charge en mémoire.

Le fichier acad.lsp étant destiné aux routines de démarrage spécifiques des applications, toutes les fonctions et variables définies dans un fichier acad.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 vers le fichier acaddoc.lsp.

La fonctionnalité recommandée des fichiers acad.lsp et acaddoc.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 n'est chargé qu'une seule fois : au démarrage de l'application. Si la variable système ACADLSPASDOC a la valeur 1, le fichier acad.lsp est rechargé avec chaque nouveau dessin.

Le fichier acad.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, les fichiers mysessionapp1.lsp, databasesynch.lsp et drawingmanager.lsp sont chargés à chaque démarrage d'AutoCAD.

(load "mysessionapp1")
(load "databasesynch")
(load "drawingmanager")
AvertissementNe modifiez pas le fichier réservé acad2012.lsp. Autodesk fournit le fichier acad2012.lsp qui contient des fonctions définies par AutoLISP requises et spécifiques à la version. Ce fichier est chargé en mémoire immédiatement avant le chargement du fichier acad.lsp.

Le fichier ACADDOC.LSP

Le fichier acaddoc.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).

A chaque ouverture d'un dessin, AutoCAD recherche un fichier acaddoc.lsp dans le chemin de la bibliothèque. S'il en trouve un, il le charge en mémoire. Le fichier acaddoc.lsp est toujours chargé avec chaque dessin indépendamment de la valeur de ACADLSPASDOC.

La plupart des utilisateurs disposent d'un fichier acaddoc.lsp unique pour toutes les routines AutoLISP basées sur des documents. AutoCAD recherche un fichier acaddoc.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, détenir un fichier acaddoc.lsp distinct permettant de charger des routines AutoLISP propres à certains types de dessin ou tâche.

Le fichier acaddoc.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, les fichiers mydocumentapp1.lsp, build.lsp et counter.lsp sont chargés à chaque ouverture d'un nouveau document.

(load "mydocumentapp1")
(load "build")
(load "counter")
AvertissementNe modifiez pas le fichier réservé acad2012doc.lsp. Autodesk fournit le fichier acad2012doc.lsp qui contient des fonctions définies par AutoLISP requises et spécifiques à la version. Ce fichier est chargé en mémoire immédiatement avant le chargement du fichier acaddoc.lsp.

Personnalisation des fichiers MNL et du menu AutoLISP

Lorsque AutoCAD charge un fichier de personnalisation, il recherche un fichier MNL portant un nom correspondant. S'il le trouve, il le charge en mémoire. Ainsi, AutoCAD charge les fonctions AutoLISP indispensables à l'utilisation appropriée d'un menu.

Ainsi, AutoCAD charge les fonctions AutoLISP indispensables à l'utilisation appropriée d'un menu. Par exemple, le fichier de personnalisation par défaut, acad.cui, se base sur le fichier acad.mnl qui définit de nombreuses fonctions AutoLISP utilisées par le menu. Le fichier MNL est chargé après le fichier acaddoc.lsp.

RemarqueSi un fichier de personnalisation est chargé à l'aide de la fonction AutoLISP command —au moyen d'une syntaxe de type (command "menu" "newmenu")—le fichier MNL associé n'est chargé qu'après exécution de la totalité de la routine AutoLISP.

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 :

Newmenu utilities… Loaded.

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 .

Fonction S::STARTUP : exécution postinitialisation

Vous pouvez définir une fonction S::STARTUP pour effectuer toute opération de configuration une fois le dessin initialisé.

Les fichiers de démarrage LISP (acad.lsp, acaddoc.lsp et MNL) sont tous chargés en mémoire 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, acaddoc.lsp ou MNL, elle est appelée lorsque vous entrez 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 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.

RemarquePour être ajoutée, la fonction S::STARTUP doit avoir été définie avec la fonction defun-q et non avec la fonction defun .

Une fonction S::STARTUP pouvant être définie en de nombreux endroits (un fichier acad.lsp, acaddoc.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à.