Caricare routine AutoLISP all'avvio ed eseguire comandi o funzioni in orari specifici durante una sessione di disegno.
I prodotti basati su AutoCAD e AutoCAD LT caricano automaticamente il contenuto di tre file definibili dall'utente:
File definibile dall'utente | Windows | Mac OS | ||
---|---|---|---|---|
AutoCAD | AutoCAD LT | AutoCAD | AutoCAD LT | |
acad.lsp | ✓ | -- | ✓ | -- |
acaddoc.lsp | ✓ | -- | ✓ | -- |
acadlt.lsp | -- | ✓ | -- | -- |
acadltdoc.lsp | -- | ✓ | -- | -- |
File MNL accompagnato dal file di personalizzazione corrente | ✓ | -- | ✓ | -- |
Per default, il file acad.lsp o acadlt.lsp viene caricato una sola volta, all'avvio del prodotto, mentre il file acaddoc.lsp o acadltdoc.lsp viene caricato con ogni singolo documento (o disegno). In questo modo è possibile associare il caricamento del file acad.lsp o acadlt.lsp con l'avvio dell'applicazione e il file acaddoc.lsp o acadltdoc.lsp all'avvio del documento (o del disegno). Il metodo di default per il caricamento di questi file di avvio può essere modificato cambiando l'impostazione della variabile di sistema ACADLSPASDOC.
Se uno di questi file definisce una funzione del tipo speciale S::STARTUP, questa routine viene eseguita subito dopo l'inizializzazione completa del disegno. In alternativa, il comando APPLOAD fornisce un'opzione Gruppo di avvio che carica le applicazioni specificate senza bisogno di modificare file.
I file di avvio acad.lsp o acadlt.lsp e acaddoc.lsp o acadltdoc.lsp non sono forniti con il prodotto. Sarà responsabilità dell'utente crearli e gestirli.
Quando si carica un file AutoLISP, le definizioni di comando presenti nel file occupano spazio in memoria anche se i comandi non vengono effettivamente utilizzati. La funzione autoload di AutoLISP rende disponibile un comando senza caricare l'intera routine in memoria. L'aggiunta del codice che segue al file acaddoc.lsp o acadltdoc.lsp comporta il caricamento automatico dei comandi CMD1, CMD2 e CMD3 dal file cmds.lsp e del comando NEWCMD dal file newcmd.lsp.
(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) (autoload "NEWCMD" '("NEWCMD"))
La prima volta che si immette un comando caricato automaticamente alla riga di comando, AutoLISP ne carica l'intera definizione dal file associato. È fornita anche la funzione autoarxload, destinata alle applicazioni ObjectARX.
È possibile creare un file acad.lsp o acadlt.lsp se si utilizzano con regolarità routine AutoLISP specifiche. Al momento dell'avvio, Autocad cerca il percorso di ricerca del file di supporto relativo ad un file acad.lsp o acadlt.lsp. Se ne trova uno, lo carica in memoria.
Poiché il file acad.lsp o acadlt.lsp deve essere utilizzato per routine di avvio specifiche delle applicazioni, tutte le funzioni e le variabili in esso definite risulteranno disponibili solo nel primo disegno. È possibile spostare dal file acad.lsp o acadlt.lsp al file acaddoc.lsp o acadltdoc.lsp le routine che devono essere disponibili in tutti i documenti.
La funzionalità consigliata dei file acad.lsp o acadlt.lsp e acaddoc.lsp o acadltdoc.lsp può essere ignorata utilizzando la variabile di sistema ACADLSPASDOC. Se la variabile di sistema ACADLSPASDOC è impostata su 0 (impostazione di default), il file acad.lsp o acadlt.lsp viene caricato una sola volta, ovvero all'avvio dell'applicazione. Se è impostata su 1, il file acad.lsp o acadlt.lsp viene ricaricato quando viene creato un nuovo disegno o quando viene aperto un file di disegno esistente.
Il file acad.lsp o acadlt.lsp può contenere codice AutoLISP per una o più routine o solo una serie di chiamate della funzione load. Quest'ultimo metodo è preferibile in quanto la modifica è più semplice. Se il codice che segue viene salvato come file acad.lsp o acadlt.lsp, i file mysessionapp1.lsp, databasesynch.lsp e drawingmanager.lsp vengono caricati ad ogni avvio del prodotto.
(load "mysessionapp1") (load "databasesynch") (load "drawingmanager")
Il file acaddoc.lsp o acadltdoc.lsp deve essere associato all'inizializzazione di ciascun documento (o disegno) ed è utile se si desidera caricare una libreria di routine AutoLISP in modo che risulti disponibile ogni volta che si avvia un nuovo disegno (o se ne apre uno esistente).
Ad ogni apertura di un disegno, AutoCAD esegue una ricerca di un file acaddoc.lsp o acadltdoc.lsp nel percorso della libreria. Se ne trova uno, lo carica in memoria. Il file acaddoc.lsp o acadltdoc.lsp viene sempre caricato assieme ad ogni disegno, indipendentemente dalle impostazioni di ACADLSPASDOC.
La maggior parte degli utenti disporrà di un singolo file acaddoc.lsp o acadltdoc.lsp per tutte le routine AutoLISP basate sui documenti. Il programma cerca un file acaddoc.lsp o acadltdoc.lsp in base all'ordine definito dal percorso della libreria. Con questa funzionalità è quindi possibile disporre di un file acaddoc.lsp o acadltdoc.lsp differente in ogni directory di disegno, in modo da caricare routine AutoLISP specifiche a seconda dei tipi di disegno o di lavoro.
Il file acaddoc.lsp o acadltdoc.lsp può contenere codice AutoLISP per una o più routine o solo una serie di chiamate della funzione load. Quest'ultimo metodo è preferibile in quanto la modifica è più semplice. Se il codice che segue viene salvato come file acaddoc.lsp o acadltdoc.lsp, i file mydocumentapp1.lsp, build.lsp e counter.lsp verranno caricati ad ogni apertura di un nuovo documento.
(load "mydocumentapp1") (load "build") (load "counter")
Quando il prodotto carica un file di personalizzazione (CUI/CUIx), esegue la ricerca di un file MNL con un nome di file corrispondente. Se individua il file, lo carica in memoria. Questa funzione assicura che vengano caricate le funzioni AutoLISP necessarie per il corretto funzionamento degli elementi dell'interfaccia utente.
Ad esempio, se il prodotto carica un file di personalizzazione denominato custom.cuix, verrà eseguita la ricerca di un file denominato custom.mnl che potrebbe definire numerose funzioni AutoLISP utilizzate dagli elementi dell'interfaccia utente nel file di personalizzazione. Il file MNL viene caricato successivamente al file acaddoc.lsp.
(command "menu" "newmenu") (princ "Newmenu utilities… Loaded.") (Princ)
In questo esempio le chiamate alla funzione princ possono essere utilizzate per visualizzare i messaggi di stato. La prima ricorrenza di princ consente la visualizzazione di quanto segue alla riga di comando:
Newmenu utilities… Loaded.
La seconda chiamata a princ consente l'uscita dalla funzione AutoLISP. Se questa seconda chiamata a princ non venisse specificata, il messaggio verrebbe visualizzato due volte. Come anticipato, è possibile includere l'argomento onfailure con le chiamate alla funzione load come ulteriore precauzione.
È possibile definire una funzione S::STARTUP per l'esecuzione di eventuali operazioni di impostazione necessarie successivamente all'inizializzazione del disegno.
I file LISP di avvio (acad.lsp o acadlt.lsp e acaddoc.lsp o acadltdoc.lsp) vengono tutti caricati in memoria insieme ai file MNL caricati automaticamente prima che il disegno venga inizializzato completamente. Di solito ciò non comporta alcun problema, a meno che non si desideri utilizzare la funzione command il cui funzionamento non è garantito finché non viene inizializzato un disegno.
Se la funzione definita dall'utente S::STARTUP è inclusa in un file acad.lsp o acadlt.lsp, acaddoc.lsp o acadltdoc.lsp o MNL, viene chiamata quando si accede ad un nuovo disegno o se ne apre uno esistente. Pertanto, è possibile includere una definizione di S::STARTUPnel file di avvio AutoLISP per l'esecuzione di eventuali operazioni di impostazione.
Ad esempio, se si desidera apportare modifiche locali al comando TRATTEGGIO standard aggiungendo un messaggio e quindi passando al comando PTRATT, utilizzare un file acaddoc.lsp o acadltdoc.lsp contenente quanto segue:
(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") )
Prima di inizializzare il disegno, vengono impostate nuove definizioni per TRATTEGGIO e OLDHATCH mediante la funzione defun. In seguito all'inizializzazione del disegno, viene chiamata la funzione S::STARTUP e viene annullata la definizione standard di TRATTEGGIO.
Dal momento che una funzione S::STARTUP può essere definita in diverse posizioni (un file acad.lsp o acadlt.lsp, acaddoc.lsp o acadltdoc.lsp o MNL oppure qualsiasi altro file AutoLISP caricato da uno di questi file), è possibile sovrascrivere una funzione S::STARTUP definita in precedenza.
Nell'esempio che segue viene illustrato un metodo che garantisce il funzionamento della funzione di avvio con altre funzioni.
(defun-q MYSTARTUP ( )
... funzione di startup ...
) (setq S::STARTUP (append S::STARTUP MYSTARTUP))
Il codice precedente consente di aggiungere la funzione di avvio a quella di una funzione S::STARTUP esistente e quindi ridefinire la funzione S::STARTUP in modo da includere il codice di avvio. Il corretto funzionamento è garantito indipendentemente dalla preesistenza di una funzione S::STARTUP.