Możliwe jest wczytywanie procedur AutoLISP podczas uruchamiania oraz wykonywanie poleceń lub funkcji w określonych momentach podczas sesji rysunkowej.
Produkty oparte na oprogramowaniu AutoCAD i AutoCAD LT automatycznie wczytują zawartość trzech plików zdefiniowanych przez użytkownika:
Plik definiowany przez użytkownika | Windows | Mac OS | ||
---|---|---|---|---|
AutoCAD | AutoCAD LT | AutoCAD | AutoCAD LT | |
acad.lsp | ✓ | -- | ✓ | -- |
acaddoc.lsp | ✓ | -- | ✓ | -- |
acadlt.lsp | -- | ✓ | -- | -- |
acadltdoc.lsp | -- | ✓ | -- | -- |
Plik MNL z dołączonym bieżącym plikiem dostosowywania | ✓ | -- | ✓ | -- |
Domyślnie plik acad.lsp lub acadlt.lsp jest wczytywany tylko raz, podczas uruchamiania produktu, natomiast plik acaddoc.lsp lub acadltdoc.lsp jest wczytywany z każdym osobnym dokumentem (lub rysunkiem). Pozwala to połączyć wczytywanie pliku acad.lsp lub acadlt.lsp z uruchamianiem aplikacji oraz wczytywanie pliku acaddoc.lsp lub acadltdoc.lsp z otwieraniem dokumentu (lub rysunku). Domyślna metoda wczytywania tych plików może zostać zmodyfikowana przez zmianę ustawienia zmiennej systemowej ACADLSPASDOC.
Jeśli jeden z tych plików definiuje funkcję specjalnego typu S::STARTUP, procedura ta jest uruchamiana bezpośrednio po zakończeniu inicjalizacji rysunku. Polecenie WCZYTAJAPL zapewnia też opcję Pakiet uruchomieniowy, która wczytuje określone aplikacje bez potrzeby edycji jakichkolwiek plików.
Pliki startowe acad.lsp lub acadlt.lsp oraz acaddoc.lsp lub acadltdoc.lsp nie są dostarczane wraz z produktem. Tworzenie i utrzymywanie tych plików zależy tylko od użytkownika.
Po wczytaniu pliku AutoLISP definicje poleceń w pliku zajmują pamięć, niezależnie od tego, czy polecenia są rzeczywiście używane. Funkcja AutoLISP autoload udostępnia polecenie bez wczytywania do pamięci całej procedury. Dodanie poniżej przedstawionych kodów do pliku acaddoc.lsp lub acadltdoc.lsp powoduje automatyczne wczytanie poleceń POL1, POL2 i POL3 z pliku cmds.lsp oraz polecenia NEWCMD z pliku newcmd.lsp.
(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) (autoload "NEWCMD" '("NEWCMD"))
Przy pierwszym wprowadzeniu automatycznie wczytanego polecenia w wierszu polecenia AutoLISP wczytuje całą definicję polecenia z pliku skojarzonego. AutoLISP zawiera także funkcję autoarxload dla aplikacji ObjectARX.
Jeśli określone procedury AutoLISP są stale używane, można utworzyć plik acad.lsp lub acadlt.lsp. Po uruchomieniu program AutoCAD szuka pliku acad.lsp lub acadlt.lsp w ścieżce wyszukiwania plików pomocniczych. Po jego znalezieniu plik acad.lsp lub acadlt.lsp jest wczytywany do pamięci.
Ponieważ plik acad.lsp lub acadlt.lsp jest przeznaczony do użycia dla procedur startowych określonych aplikacji, wszystkie funkcje i zmienne zdefiniowane w pliku acad.lsp lub acadlt.lsp są dostępne tylko w pierwszym rysunku. Procedury, które powinny być dostępne we wszystkich dokumentach, mogą być przeniesione z pliku acad.lsp lub acadlt.lsp do pliku acaddoc.lsp lub acadltdoc.lsp.
Zalecane działanie plików acad.lsp lub acadlt.lsp oraz acaddoc.lsp lub acadltdoc.lsp można zmienić przez ustawienie zmiennej systemowej ACADLSPASDOC. Jeśli zmienna systemowa ACADLSPASDOC ma wartość 0 (ustawienie domyślne), wówczas plik acad.lsp lub acadlt.lsp jest wczytywany tylko raz — podczas uruchamiania aplikacji. Jeśli ta zmienna ma wartość 1, plik acad.lsp lub acadlt.lsp jest ponownie wczytywany podczas tworzenia nowego rysunku lub otwierania istniejącego pliku rysunku.
Plik acad.lsp lub acadlt.lsp może zawierać kody AutoLISP dla jednej lub większej liczby procedur bądź po prostu szereg wywołań funkcji load. Zaleca się stosowanie tej drugiej metody, ponieważ przeprowadzanie modyfikacji jest wówczas łatwiejsze. Po zapisaniu poniższego kodu w postaci pliku o nazwie acad.lsp lub acadlt.lsp pliki mysessionapp1.lsp, databasesynch.lsp oraz drawingmanager.lsp są wczytywane przy każdym uruchomieniu programu.
(load "mysessionapp1") (load "databasesynch") (load "drawingmanager")
Plik acaddoc.lsp lub acadltdoc.lsp jest przeznaczony do kojarzenia z każdą inicjacją dokumentu (lub rysunku). Plik ten pozwala na wczytywanie do pamięci biblioteki procedur AutoLISP przy tworzeniu nowego (lub otwarciu istniejącego) rysunku.
Za każdym razem, gdy otwierany jest rysunek, program AutoCAD przeszukuje ścieżkę dostępu do biblioteki w celu wyszukania pliku acaddoc.lsp lub acadltdoc.lsp file. Jeśli plik ten zostanie znaleziony, jest on wczytywany do pamięci operacyjnej. Plik acaddoc.lsp lub acadltdoc.lsp jest zawsze wczytywany wraz z każdym rysunkiem, niezależnie od ustawienia zmiennej ACADLSPASDOC.
Większość użytkowników posiada pojedynczy plik acaddoc.lsp lub acadltdoc.lsp dla wszystkich procedur AutoLISP opartych na dokumentach. Program wyszukuje plik acaddoc.lsp lub acadltdoc.lsp w kolejności określonej ścieżką dostępu do biblioteki, dlatego też w każdym z katalogów rysunków można umieszczać inny plik acaddoc.lsp lub acadltdoc.lsp, który będzie wczytywać określone procedury AutoLISP dla różnych typów rysunków i zadań.
Plik acaddoc.lsp lub acadltdoc.lsp może zawierać kody AutoLISP dla jednej lub większej liczby procedur bądź po prostu szereg wywołań funkcji load. Zaleca się stosowanie tej drugiej metody, ponieważ przeprowadzanie modyfikacji jest wówczas łatwiejsze. Po zapisaniu poniższego kodu do pliku o nazwie acaddoc.lsp lub acadltdoc.lsp pliki mydocumentapp1.lsp, build.lsp oraz counter.lsp są wczytywane przy każdym otwarciu nowego dokumentu.
(load "mydocumentapp1") (load "build") (load "counter")
Gdy produkt wczytuje plik adaptacji (CUI/CUIx), szuka pliku MNL o odpowiedniej nazwie. Po znalezieniu pliku jest on wczytywany do pamięci operacyjnej. Ten tryb postępowania zapewnia wczytanie funkcji AutoLISP niezbędnych do poprawnego działania elementów interfejsu użytkownika.
Jeśli na przykład produkt wczytuje plik dostosowywania o nazwie custom.cuix, wyszuka on plik o nazwie custom.mnl, który może definiować wiele funkcji AutoLISP wykorzystywanych przez elementy interfejsu użytkownika w pliku dostosowywania. Plik MNL jest wczytywany po pliku acaddoc.lsp.
(command "menu" "newmenu") (princ "Newmenu utilities… Loaded.") (Princ)
W przykładzie tym wywołania funkcji princ są używane do wyświetlenia komunikatów o stanie. Pierwsze wywołanie funkcji princ wyświetla w wierszu polecenia następujący tekst:
Newmenu utilities… Wczytane.
Z kolei drugie wywołanie funkcji princ powoduje zakończenie funkcji bez żadnych komunikatów. Bez drugiego wywołania funkcji princ komunikat zostałby wyświetlony dwukrotnie. Jak wcześniej wspomniano, jako dodatkowy środek ostrożności przy wywoływaniu funkcji load można zastosować argument komunikat_o_błędzie.
Można zdefiniować funkcję S::STARTUP w taki sposób, aby wprowadzała różne ustawienia po inicjalizacji rysunku.
Wszystkie pliki startowe LISP (acad.lsp lub acadlt.lsp oraz acaddoc.lsp lub acadltdoc.lsp) są wczytywane do pamięci wraz z wszystkimi automatycznie wczytywanymi plikami MNL przed zakończeniem inicjalizacji rysunku. Procedura ta zwykle przebiega bez problemów, o ile nie zachodzi potrzeba użycia funkcji command, która może nie działać poprawnie przed inicjacją rysunku.
Jeśli funkcja użytkownika S::STARTUP znajduje się w pliku acad.lsp lub acadlt.lsp, w pliku acaddoc.lsp lub acadltdoc.lsp, ewentualnie w pliku MNL, jest ona wywoływana podczas tworzenia nowego rysunku lub otwierania istniejącego rysunku. W ten sposób można dołączyć definicję funkcji S::STARTUP do pliku startowego AutoLISP, aby umożliwić wykonywanie operacji konfiguracyjnych.
Jeśli na przykład użytkownik chce nadpisać standardowe polecenie KRESKUJ przez dodanie komunikatu i przełączenie do polecenia GKRESKUJ, należy użyć pliku acaddoc.lsp lub acadltdoc.lsp zawierającego następujący kod:
(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") )
Przed inicjacją rysunku nowe definicje poleceń KRESKUJ i GKRESKUJ tworzone są przez funkcję defun. Po inicjalizacji rysunku wywoływana jest funkcja S::STARTUP, a standardowa definicja polecenia KRESKUJ jest usuwana.
W związku z tym, że funkcję S::STARTUP można definiować w wielu lokalizacjach (w pliku acad.lsp lub acadlt.lsp, acaddoc.lsp lub acadltdoc.lsp, ewentualnie w pliku MNL oraz w innych plikach AutoLISP wczytywanych z jednego z wcześniej wymienionych), możliwe jest zastąpienie wcześniej zdefiniowanej funkcji S::STARTUP.
Poniższy przykład przedstawia jedną z metod upewnienia się, że używana funkcja startowa działa z innymi funkcjami.
(defun-q MYSTARTUP ( )
... używana funkcja startowa ...
) (setq S::STARTUP (append S::STARTUP MYSTARTUP))
Powyższy kod dołącza używaną funkcję startową do istniejącej funkcji S::STARTUP, a następnie ponownie definiuje funkcję S::STARTUP, aby włączyć do niej używany kod startowy. Metoda ta działa poprawnie bez względu na to, czy funkcja S::STARTUP wcześniej istniała.