O automatickém načítání a spouštění procedur jazyka AutoLISP

Procedury jazyka AutoLISP je možné načítat při spuštění a příkazy nebo funkce lze provádět v určitých okamžicích během relace kreslení.

Produkty založené na aplikacích AutoCAD a AutoCAD LT automaticky načítají obsah tří souborů definovatelných uživatelem:

Uživatelsky definovatelný soubor Windows Mac OS
AutoCAD AutoCAD LT AutoCAD AutoCAD LT
acad.lsp -- --
acaddoc.lsp -- --
acadlt.lsp -- -- --
acadltdoc.lsp -- -- --
soubor MNL doprovázený aktuálním souborem přizpůsobení -- --

Ve výchozím nastavení je soubor acad.lsp nebo acadlt.lsp načten pouze jednou při spuštění produktu, zatímco soubor acaddoc.lsp nebo acadltdoc.lsp je načten s každým samostatným dokumentem (nebo výkresem). Toto umožňuje asociovat soubor acad.lsp nebo acadlt.lsp se spuštěním aplikace a soubor acaddoc.lsp nebo acadltdoc.lsp se spuštěním dokumentu (nebo výkresu). Výchozí metodu načítání těchto spouštěcích souborů je možné upravit změnou nastavení systémové proměnné ACADLSPASDOC.

Pokud jeden z těchto souborů definuje funkci speciálního typu S::STARTUP, tato procedura se spustí bezprostředně po úplné inicializaci výkresu. Jako alternativu je možné použít příkaz APLČTI s možností Při spuštění, která načte určené aplikace, aniž by bylo nutné upravovat soubory.

Soubory spuštění acad.lsp nebo acadlt.lsp a acaddoc.lsp nebo acadltdoc.lsp nejsou s produktem dodávány. Je na uživateli, aby tyto soubory vytvořil a spravoval.

Poznámka: Počínaje produkty založenými na aplikaci AutoCAD 2014 musí vlastní aplikace pracovat v zabezpečeném režimu – systémová proměnná SECURELOAD musí být nastavena na hodnotu 1 nebo 2. Při práci v zabezpečeném režimu je načítání a spouštění souborů obsahujících kód v produktu omezeno na důvěryhodná umístění, přičemž důvěryhodná umístění jsou určena systémovou proměnnou TRUSTEDPATHS.

Automatické načítání příkazů

Po načtení souboru jazyka AutoLISP budou definice příkazů v souboru zabírat paměť bez ohledu na to, zda ve skutečnosti příkazy používáte či nikoli. Funkce jazyka AutoLISP autoload načítá požadovaný příkaz bez načtení celé procedury do paměti. Přidáním následujícího kódu do souboru acaddoc.lsp nebo acadltdoc.lsp budou automaticky načítány příkazy CMD1, CMD2 a CMD3 ze souboru cmds.lsp a příkaz NEWCMD ze souboru newcmd.lsp.

(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) 
(autoload "NEWCMD" '("NEWCMD"))

Při prvním zadání automaticky načteného příkazu na příkazovém řádku AutoLISP načte celou definici příkazu z asociovaného souboru. Jazyk AutoLISP rovněž nabízí funkci autoarxload pro aplikace ObjectARX.

Poznámka: Podobně pojmenované spouštěcí soubory jazyka AutoLISP jsou načteny podle jejich upraveného časového razítka – pokud neurčíte úplný název souboru (včetně přípony souboru), načte se soubor LSP s nejnovějším časovým razítkem.

Soubor ACAD.LSP nebo ACADLT.LSP

Pokud pravidelně používáte určité procedury jazyka AutoLISP, můžete vytvořit soubor acad.lsp nebo acadlt.lsp. Aplikace AutoCAD hledá při spuštění soubor acad.lsp nebo acadlt.lsp v cestě hledání podpůrných souborů. Pokud je soubor acad.lsp nebo acadlt.lsp nalezen, načte se do paměti.

Vzhledem k tomu, že je soubor acad.lsp or acadlt.lsp určen pro spouštěcí procedury specifické pro aplikaci, všechny funkce a proměnné definované v souboru acad.lsp nebo acadlt.lsp budou dostupné pouze pro první výkres. Procedury, které mají být dostupné pro všechny dokumenty, je nutné přesunout ze souboru acad.lsp nebo acadlt.lsp do souboru acaddoc.lsp nebo acadltdoc.lsp.

Doporučenou funkcionalitu souborů acad.lsp nebo acadlt.lsp a acaddoc.lsp nebo acadltdoc.lsp je možné přepsat pomocí systémové proměnné ACADLSPASDOC. Pokud je systémová proměnná ACADLSPASDOC nastavena na hodnotu 0 (výchozí nastavení), soubor acad.lsp nebo acadlt.lsp bude načten jen jednou: při spuštění aplikace. Pokud je nastavena na hodnotu 1, soubor acad.lsp nebo acadlt.lsp se znovu načte při vytvoření nového výkresu nebo při otevření existujícího výkresového souboru.

Soubor acad.lsp nebo acadlt.lsp může obsahovat kód jazyka AutoLISP pro jednu nebo více procedur, případně pouze řadu volání funkce load. Druhá metoda je výhodnější z hlediska úprav. Pokud uložíte následující kód do souboru acad.lsp nebo acadlt.lsp, budou soubory mysessionapp1.lsp, databasesynch.lsp a drawingmanager.lsp načteny při každém spuštění produktu.

(load "mysessionapp1")
(load "databasesynch")
(load "drawingmanager")
Poznámka: Neměňte rezervované soubory acad<verze>.lsp nebo acadlt<verze>.lsp. Společnost Autodesk nabízí soubor acad<release>.lsp nebo acadlt<release>.lsp, který obsahuje požadované funkce specifické pro danou verzi definované v jazyku AutoLISP. Tento soubor je načten do paměti bezprostředně před načtením souboru acad.lsp nebo acadlt.lsp. Výraz <verze> představuje verzi produktu, například acad2025.lsp by byl soubor načítaný produkty založenými na aplikacích AutoCAD a AutoCAD 2025 a acadlt2025.lsp by byl soubor načtený aplikací AutoCAD LT 2025.

Soubor ACADDOC.LSP nebo ACADLTDOC.LSP

Soubor acaddoc.lsp nebo acadltdoc.lsp je určen k asociaci s inicializací s každým dokumentem (nebo výkresem). Tento soubor je užitečný v případě, kdy chcete, aby načtená knihovna procedur jazyka AutoLISP byla dostupná při každém vytvoření nového výkresu (nebo otevření existujícího výkresu).

Při každém otevření výkresu aplikace AutoCAD hledá cestu knihovny pro soubor acaddoc.lsp nebo acadltdoc.lsp. Pokud jej najde, načte soubor do paměti. Soubor acaddoc.lsp nebo acadltdoc.lsp je bez ohledu na nastavení proměnné ACADLSPASDOC vždy načten s každým výkresem.

Většina uživatelů bude mít pouze jeden soubor acaddoc.lsp nebo acadltdoc.lsp u všech procedur jazyka AutoLISP pro dokumenty. Produkt hledá soubor acaddoc.lsp nebo acadltdoc.lsp v pořadí definovaném cestou knihovny, proto díky této funkci je možné mít v každém adresáři s výkresy jiný soubor acaddoc.lsp nebo acadltdoc.lsp, který načte konkrétní procedury jazyka AutoLISP pro určité typy výkresů nebo úloh.

Soubor acaddoc.lsp nebo acadltdoc.lsp může obsahovat kód jazyka AutoLISP pro jednu nebo více procedur, případně pouze řadu volání funkce load. Druhá metoda je výhodnější z hlediska úprav. Pokud uložíte následující kód jako soubor acaddoc.lsp nebo acadltdoc.lsp, budou soubory mydocumentapp1.lsp, build.lsp a counter.lsp načteny při každém otevření nového dokumentu.

(load "mydocumentapp1")
(load "build")
(load "counter")
Poznámka: Neměňte rezervovaný soubor acad<verze>doc.lsp nebo acadlt<verze>doc.lsp. Společnost Autodesk nabízí soubor acad<verze>doc.lsp nebo acadlt<verze>doc.lsp, který obsahuje požadované funkce specifické pro danou verzi definované v jazyku AutoLISP. Tento soubor je načten do paměti bezprostředně před načtením souboru acaddoc.lsp nebo acadltdoc.lsp. Výraz <verze> představuje verzi produktu, například acad2025doc.lsp by byl soubor načítaný produkty založenými na aplikacích AutoCAD a AutoCAD 2025 a acadlt2025doc.lsp by byl soubor načtený aplikací AutoCAD LT 2025.

Soubory MNL a přizpůsobení nabídky jazyka AutoLISP

Jakmile produkt načte soubor uživatelských úprav (CUI/CUIx), hledá soubor MNL s odpovídajícím názvem. Pokud jej najde, načte tento soubor do paměti. Tato funkce zajišťuje, aby byly načteny funkce jazyka AutoLISP, které jsou potřebné ke správnému fungování prvků uživatelského rozhraní.

Poznámka: Aplikace AutoCAD LT nepodporuje automatické načítání souborů MNL, soubory však je možné načíst pomocí funkce LOAD jazyka AutoLISP z jiného souboru LISP.

Pokud například produkt načte soubor uživatelských úprav s názvem custom.cuix, vyhledá soubor s názvem custom.mnl, který může definovat řadu funkcí jazyka AutoLISP používaných prvky uživatelského rozhraní v souboru uživatelských úprav. Soubor MNL je načten po souboru acaddoc.lsp.

Poznámka: Pokud načítáte soubor uživatelských úprav pomocí funkce command jazyka AutoLISP – se syntaxí podobnou výrazu (command "menu" "newmenu") – asociovaný soubor MNL nebude načten dokud nebude ukončena celá procedury jazyka AutoLISP.
(command "menu" "newmenu")

(princ "Newmenu utilities… Loaded.")
(Princ)

V tomto příkladu je možné pomocí volání funkce princ zobrazit stavové informace. Po prvním použití funkce princ se na příkazovém řádku zobrazí následující:

Newmenu utilities… Loaded.

Druhé volání princ ukončí funkci jazyka AutoLISP. Bez tohoto druhého volání funkce princ by se zpráva zobrazila dvakrát. Jak bylo uvedeno dříve, je možné zahrnout argument onfailure do volání funkce load jako předběžné opatření.

Funkce S::STARTUP: spuštění po inicializaci

Definováním funkce S::STARTUP je možné po inicializaci výkresu provést libovolné potřebné operace nastavení.

Spouštěcí soubory jazyka LISP (acad.lsp nebo acadlt.lsp a acaddoc.lsp nebo acadltdoc.lsp) jsou všechny načteny do paměti společně s libovolnými automaticky načtenými soubory MNL před plnou inicializací výkresu. Většinou toto nepředstavuje problém, pokud nechcete použít funkci command, jejíž funkčnost není před dokončením inicializace výkresu garantována.

Poznámka: Aplikace AutoCAD LT nepodporuje automatické načítání souborů MNL, soubory však je možné načíst pomocí funkce LOAD jazyka AutoLISP z jiného souboru LISP.

Pokud je uživatelsky definovaná funkce S::STARTUP obsažena v souboru acad.lsp nebo acadlt.lsp, acaddoc.lsp nebo acadltdoc.lsp, případně v souboru MNL, je volána při přechodu do nového výkresu nebo otevření existujícího výkresu. Funkci S::STARTUP je tedy možné vložit do spouštěcího souboru jazyka AutoLISP za účelem provedení libovolných operací nastavení.

Chcete-li například přepsat standardní příkaz ŠRAFY tak, aby zobrazil zprávu a poté se přepnul na příkaz HŠRAFY, použijte soubor acaddoc.lsp nebo acadltdoc.lsp, který obsahuje následující kód.

(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")
)

Před inicializací výkresu jsou nové definice příkazů ŠRAFY a PŮVŠRAFY definovány funkcí defun. Po inicializaci výkresu se zavolá funkce S::STARTUP a definice standardního příkazu ŠRAFY se zruší.

Poznámka: Aby mohla funkce být S::STARTUP připojena, musí být definována pomocí defun-q, nikoli pomocí příkazu defun.

Vzhledem k tomu, že funkce S::STARTUP může být definována na mnoha místech (soubor acad.lsp nebo acadlt.lsp, acaddoc.lsp nebo acadltdoc.lsp, případně soubor MNL nebo libovolný jiný soubor jazyka AutoLISP načtený z těchto souborů), je možné přepsat dříve definovanou funkci S::STARTUP.

Následující příklad ukazuje způsob zajištění toho, že spouštěcí funkce bude fungovat s ostatními funkcemi.

(defun-q MYSTARTUP ( )

... spouštěcí funkce ...

)
(setq S::STARTUP (append S::STARTUP MYSTARTUP))

Předchozí kód připojí spouštěcí funkci k již existující funkci S::STARTUP a poté předefinováním funkce S::STARTUP začlení spouštěcí kód. Tato metoda funguje správně bez ohledu na dřívější existenci funkce S::STARTUP.