Laden von AutoLISP-Routinen beim Starten und Ausführen von Befehlen und Funktionen zu bestimmten Zeitpunkten während einer Zeichnungssitzung
AutoCAD-basierte Produkte und AutoCAD LT laden den Inhalt von drei benutzerdefinierten Dateien automatisch:
Benutzerdefinierbare Datei | Windows | Mac OS | ||
---|---|---|---|---|
AutoCAD | AutoCAD LT | AutoCAD | AutoCAD LT | |
acad.lsp | ✓ | -- | ✓ | -- |
acaddoc.lsp | ✓ | -- | ✓ | -- |
acadlt.lsp | -- | ✓ | -- | -- |
acadltdoc.lsp | -- | ✓ | -- | -- |
MNL-Datei mit aktueller Anpassungsdatei | ✓ | -- | ✓ | -- |
Vorgabemäßig wird die Datei acad.lsp oder acadlt.lsp nur einmal beim Start des Produkts geladen, während die Datei acaddoc.lsp oder acadltdoc.lsp mit jedem einzelnen Dokument (oder jeder Zeichnung) geladen wird. Auf diese Weise können Sie das Laden der Datei acad.lsp oder acadlt.lsp beim Programmstart und das Laden der Datei acaddoc.lsp oder acadltdoc.lsp mit dem Aufruf des Dokuments (oder der Zeichnung) verknüpfen. Die Vorgabemethode zum Laden dieser Startdateien kann geändert werden, indem Sie die Einstellung der Systemvariablen ACADLSPASDOC ändern.
Wenn eine dieser Dateien eine Funktion des Sondertyps S::STARTUP definiert, wird diese Routine sofort nach der Initialisierung der Zeichnung ausgeführt. Alternativ stellt der Befehl APPLOAD eine Startgruppen-Option zur Verfügung, mit der die angegebenen Anwendungen geladen werden, ohne dass Dateien bearbeitet werden müssen.
Die Startdateien acad.lsp oder acadlt.lsp und acaddoc.lsp oder acadltdoc.lsp sind nicht im Lieferumfang des Produkts enthalten. Diese Dateien müssen vom Benutzer erstellt und gepflegt werden.
Wenn Sie eine AutoLISP-Datei laden, benötigen die Befehlsdefinitionen in der Datei Speicherplatz, unabhängig davon, ob Sie sie tatsächlich verwenden. Die AutoLISP-Funktion autoload stellt einen Befehl zur Verfügung, ohne dass dabei die gesamte Routine in den Speicher geladen wird. Wenn Sie den folgenden Code der Datei acaddoc.lsp oder acadltdoc.lsp hinzufügen, werden die Befehle CMD1, CMD2 und CMD3 aus der Datei cmds.lsp und der Befehl NEWCMD aus der Datei newcmd.lsp automatisch geladen.
(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) (autoload "NEWCMD" '("NEWCMD"))
Wenn Sie einen automatisch geladenen Befehl das erste Mal in der Befehlszeile eingeben, lädt AutoLISP die gesamte Befehlsdefinition aus der entsprechenden Datei. AutoLISP stellt außerdem die Funktion autoarxload für ObjectARX-Anwendungen zur Verfügung.
Sie können eine acad.lsp- oder acadlt.lsp-Datei erstellen, wenn Sie regelmäßig bestimmte AutoLISP-Routinen verwenden. Beim Start von AutoCAD wird der Suchpfad für die Support-Datei nach der Datei acad.lsp oder acadlt.lsp durchsucht. Wenn die Datei acad.lsp oder acadlt.lsp gefunden wird, wird sie in den Speicher geladen.
Da die Datei acad.lsp oder acadlt.lsp zur Verwendung bestimmter anwendungsspezifischer Start-Routinen ausgelegt ist, stehen alle in einer acad.lsp- oder acadlt.lsp-Datei definierten Funktionen und Variablen nur in der ersten Zeichnung zur Verfügung. Nach Möglichkeit sollten Sie Routinen, die in allen Dokumenten verfügbar sein sollten, aus der Datei acad.lsp oder acadlt.lsp in die Datei acaddoc.lsp oder acadltdoc.lsp verschieben.
Die empfohlenen Funktionen der Dateien acad.lsp oder acadlt.lsp und acaddoc.lsp oder acadltdoc.lsp können mit der Systemvariablen ACADLSPASDOC überschrieben werden. Die Systemvariable ACADLSPASDOC wird auf 0 gesetzt (Vorgabe), die Datei acad.lsp oder acadlt.lsp wird nur einmal beim Start der Anwendung geladen. Mit der Einstellung 1 wird die Datei acad.lsp oder acadlt.lsp erneut geladen, wenn eine neue Zeichnung erstellt oder eine vorhandene Zeichnungsdatei geöffnet wird.
Die Datei acad.lsp oder acadlt.lsp kann AutoLISP-Code für eine oder mehrere Routinen oder eine Serie von load-Funktionsaufrufen enthalten. Die letztere Methode empfiehlt sich, da die Änderungen einfacher vorzunehmen sind. Wenn Sie den folgenden Code als acad.lsp- oder acadlt.lsp-Datei speichern, werden die Dateien mysessionapp1.lsp, databasesynch.lsp und drawingmanager.lsp jedes Mal geladen, wenn Sie das Produkt starten.
(load "mysessionapp1") (load "databasesynch") (load "drawingmanager")
Die Datei acaddoc.lsp oder acadltdoc.lsp ist jeder Dokument- bzw. Zeichnungsinitialisierung zugeordnet. Diese Datei ist nützlich, wenn Sie eine Bibliothek mit AutoLISP-Routinen laden möchten, die bei jedem Start einer neuen Zeichnung oder Öffnen einer vorhandenen Zeichnung zur Verfügung stehen.
Jedes Mal, wenn eine Zeichnung geöffnet wird, durchsucht AutoCAD den Bibliothekspfad nach der Datei acaddoc.lsp oder acadltdoc.lsp. Wird eine Datei gefunden, lädt das Programm die Datei in den Speicher. Die Datei acaddoc.lsp oder acadltdoc.lsp wird mit jeder Zeichnung geladen, unabhängig von den Einstellungen für ACADLSPASDOC.
Die meisten Benutzer verfügen über eine einzige acaddoc.lsp- oder acadltdoc.lsp-Datei für alle dokumentbasierten AutoLISP-Routinen. Das Programm sucht anhand der im Bibliothekspfad angegebenen Reihenfolge nach einer acaddoc.lsp- oder acadltdoc.lsp-Datei. Dank dieser Funktion ist es daher möglich, über verschiedene acaddoc.lsp- bzw. acadltdoc.lsp-Dateien in den jeweiligen Zeichnungsverzeichnissen zu verfügen, sodass bestimmte AutoLISP-Routinen für bestimmte Zeichnungstypen oder Aufträge geladen werden können.
Die Datei acaddoc.lsp oder acadltdoc.lsp kann AutoLISP-Code für eine oder mehrere Routinen oder eine Serie von load-Funktionsaufrufen enthalten. Die letztere Methode empfiehlt sich, da die Änderungen einfacher vorzunehmen sind. Wenn Sie den folgenden Code in der Datei acaddoc.lsp oder acadltdoc.lsp laden, werden die Dateien mydocumentapp1.lsp, build.lsp und counter.lsp jedes Mal geladen, wenn ein neues Dokument geöffnet wird.
(load "mydocumentapp1") (load "build") (load "counter")
Beim Laden einer Anpassungsdatei (CUI-/CUIx-Datei) sucht das Produkt nach einer MNL-Datei mit einem entsprechenden Dateinamen. Wird die Datei gefunden, lädt das Programm die Datei in den Speicher. Durch diese Funktion wird sichergestellt, dass die für die ordnungsgemäße Ausführung der Benutzeroberflächenelemente erforderlichen AutoLISP-Funktionen geladen werden.
Wenn das Produkt beispielsweise die Anpassungsdatei custom.cuix lädt, sucht es nach der Datei custom.mnl, durch die möglicherweise zahlreiche AutoLISP-Funktionen definiert werden, die wiederum von den Elementen der Benutzeroberfläche in der Anpassungsdatei verwendet werden. Die MNL-Datei wird nach der Datei acaddoc.lsp geladen.
(command "menu" "newmenu") (princ "Newmenu utilities… Loaded.") (Princ)
In diesem Beispiel können princ-Funktionsaufrufe verwendet werden, um Statusmeldungen anzuzeigen. Bei der ersten Verwendung von princ wird Folgendes in der Befehlszeile angezeigt:
Newmenu utilities… Loaded.
Der zweite Aufruf von princ beendet die AutoLISP-Funktion. Ohne diesen zweiten Aufruf von princ wird die Meldung zweimal angezeigt. Wie bereits erwähnt, können Sie das Argument onfailure durch Aufrufen der load-Funktion als zusätzliche Vorsichtsmaßnahme einschließen.
Sie können eine S::STARTUP-Funktion definieren, um nach der Zeichnungsinitialisierung benötigte Einrichtungsoperationen durchzuführen.
Die Start-LISP-Dateien (acad.lsp oder acadlt.lsp und acaddoc.lsp oder acadltdoc.lsp) werden zusammen mit allen automatisch geladenen MNL-Dateien in den Speicher geladen, bevor die Zeichnung vollständig initialisiert wird. Dies stellt normalerweise kein Problem dar, es sei denn, Sie möchten die command-Funktion verwenden. Es kann nicht garantiert werden, dass diese vor der Zeichnungsinitialisierung funktioniert.
Wenn die benutzerdefinierte Funktion S::STARTUP in eine acad.lsp-, acadlt.lsp-, acaddoc.lsp-, acadltdoc.lsp- oder MNL-Datei eingefügt wird, wird sie beim Starten einer neuen Zeichnung oder beim Öffnen einer vorhandenen Zeichnung aufgerufen. Sie können daher eine Definition von S::STARTUP in die AutoLISP-Startdatei einfügen, um Startoperationen durchzuführen.
Wenn Sie beispielsweise den Vorgabebefehl SCHRAFF überschreiben möchten, indem sie eine Meldung hinzufügen und anschließend zum Befehl GSCHRAFF wechseln, verwenden Sie eine acaddoc.lsp- oder acadltdoc.lsp-Datei mit folgendem Inhalt:
(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") )
Vor der Initialisierung der Zeichnung werden neue Definitionen für SCHRAFF und OLDHATCH mithilfe der defun-Funktion definiert. Nach der Initialisierung der Zeichnung wird die S::STARTUP-Funktion aufgerufen, und die Vorgabedefinition von SCHRAFF wird aufgehoben.
Da eine S::STARTUP-Funktion an verschiedenen Stellen definiert werden kann (in einer acad.lsp-, acadlt.lsp-, acaddoc.lsp-, acadltdoc.lsp- oder MNL-Datei oder einer anderen von diesen Dateien geladenen AutoLISP-Datei), ist es möglich, eine zuvor definierte S::STARTUP-Funktion zu überschreiben.
Im nachfolgenden Beispiel ist eine Möglichkeit dargestellt, wie Sie sicherstellen können, dass die Startfunktion mit anderen Funktionen zusammen funktioniert.
(defun-q MYSTARTUP ( )
... Ihre Startfunktion ...
) (setq S::STARTUP (append S::STARTUP MYSTARTUP))
Der vorhergehende Code hängt Ihre Startfunktion an die einer vorhandenen S::STARTUP-Funktion an und definiert die S::STARTUP-Funktion anschließend neu, um Ihren Startcode zu übernehmen. Dies funktioniert ordnungsgemäß unabhängig von einer bereits vorhandenen S::STARTUP-Funktion.