Információk az AutoLISP rutinok automatikus betöltéséről és futtatásáról

Betölthet AutoLISP rutinokat az indításkor, és bizonyos parancsokat vagy függvényeket a rajzszerkesztés meghatározott fázisaiban automatikusan is futtathat.

Az AutoCAD-alapú termékek és az AutoCAD LT automatikusan betöltik három, felhasználó által definiálható fájl tartalmát:

Felhasználó által definiálható fájl Windows Mac OS
AutoCAD AutoCAD LT AutoCAD AutoCAD LT
acad.lsp
acaddoc.lsp
acadlt.lsp
acadltdoc.lsp
MNL-fájl és az aktuális testreszabási fájl

Alapértelmezés szerint az acad.lsp vagy acadlt.lsp fájl csak egyszer töltődik be a termék indításakor, míg az acaddoc.lsp vagy acadltdoc.lsp fájlt minden egyes dokumentumhoz (vagy rajzhoz) betölti a rendszer. Ennélfogva az acad.lsp vagy acadlt.lsp fájl betöltése az alkalmazás indításával, az acaddoc.lsp vagy acadltdoc.lsp fájl betöltése pedig a dokumentum (vagy rajz) indításával függ össze. Ezen induláskor betöltendő fájlok alapértelmezett betöltési módja az ACADLSPASDOC rendszerváltozó értékének megváltoztatásával módosítható.

Ha e fájlok valamelyike egy S::STARTUP típusú függvényt definiál, a rutin futtatása közvetlenül a rajz teljes inicializálása után történik. Használhatja az ALKTÖLT parancs Indítópult opcióját is, amely anélkül tölti be az adott alkalmazást, hogy bármely fájlt szerkesztenie kellene.

Az acad.lsp vagy acadlt.lsp, illetve acaddoc.lsp vagy acadltdoc.lsp indítófájlok nincsenek mellékelve a termékhez. Ezeket a felhasználónak kell létrehoznia és karbantartania.

Megjegyzés: Az AutoCAD 2014-alapú termékektől kezdve a felhasználói alkalmazásoknak biztonságos módban kell futniuk, ha a SECURELOAD rendszerváltozó értéke 1 vagy 2. Biztonságos módban történő futtatáskor a termék a megbízható helyről származó kódot tartalmazó fájlok betöltésére és végrehajtására korlátozott. A megbízható helyeket a TRUSTEDPATHS rendszerváltozó adja meg.

Parancs automatikus betöltése

Az AutoLISP-fájlok betöltésekor a fájlban található parancsdefiníciók memóriát használnak akkor is, ha nem használja a parancsokat. Az AutoLISP autoload függvénye anélkül tesz elérhetővé egy parancsot, hogy az egész rutint a memóriába töltené. Ha az alábbi kódot hozzáírja az acaddoc.lsp vagy acadltdoc.lsp fájlhoz, akkor az automatikusan betölti a PARANCS1, a PARANCS2 és a PARANCS3 parancsot a cmds.lsp fájlból, és a NEWCMD parancsot a newcmd.lsp fájlból.

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

Amikor a parancspromptnál első alkalommal írja be egy automatikusan betöltődő parancs nevét, az AutoLISP a teljes parancsdefiníciót betölti a megfelelő fájlból. Az AutoLISP az autoarxload függvényt is biztosítja az ObjectARX-alkalmazásokhoz.

Megjegyzés: Az azonos nevű AutoLISP-alkalmazásfájlok közül a legfrissebb töltődik be; ugyancsak a legfrissebb LSP-, FAS-, illetve VLX-fájl kerül betöltésre, hacsak meg nem adja a teljes fájlnevet (a kiterjesztéssel együtt).

Az ACAD.LSP vagy ACADLT.LSP fájl

Ha rendszeresen használ speciális AutoLISP-rutinokat, létrehozhat egy acad.lsp vagy acadlt.lsp fájlt. Az AutoCAD elindításakor a program a támogatási fájlok keresési útvonalán megkeresi az acad.lsp vagy acadlt.lsp fájlt. Ha megtalálja az acad.lsp vagy acadlt.lsp fájlt, betölti a memóriába.

Mivel az acad.lsp vagy acadlt.lsp fájlt csak az alkalmazásspecifikus indítási rutinok esetében lehet használni, az acad.lsp vagy acadlt.lsp fájlban definiált függvények és rutinok csak az első rajzban érhetők el. Azokat a rutinokat, amelyeket az összes dokumentumban elérhetővé szeretne tenni, érdemes áthelyezni az acad.lsp vagy acadlt.lsp fájlból az acaddoc.lsp vagy acadltdoc.lsp fájlba.

Az acad.lsp vagy acadlt.lsp és az acaddoc.lsp vagy acadltdoc.lsp fájl javasolt funkcióit felül lehet bírálni az ACADLSPASDOC rendszerváltozóval. Ha az ACADLSPASDOC rendszerváltozó értéke 0 (alapbeállítás), az acad.lsp vagy acadlt.lsp fájl csak egyszer töltődik be: az alkalmazás indításakor. Ha az érték 1, akkor a program minden egyes új rajz létrehozásánál és meglévő rajz megnyitásánál újra betölti az acad.lsp vagy acadlt.lsp fájlt.

Az acad.lsp vagy acadlt.lsp fájl tartalmazhat egy vagy több rutinhoz tartozó AutoLISP-kódot, illetve állhat kizárólag load függvényhívások sorozatából is. Az utóbbi módszer előnyösebb, mivel a kód módosítása egyszerűbb. Ha acad.lsp vagy acadlt.lsp fájlnévvel menti a következő kódot, a mysessionapp1.lsp, databasesynch.lsp és drawingmanager.lsp fájlok a program minden egyes indításakor betöltődnek.

(load "mysessionapp1")
(load "databasesynch")
(load "drawingmanager")
Megjegyzés: Ne módosítsa a fenntartott acad<verzió>.lsp vagy acadlt<verzió>.lsp fájlokat. Az Autodesk biztosítja a szükséges, verzióspecifikus, az AutoLISP által meghatározott funkciókat tartalmazó acad<verzió>.lsp vagy acadlt<release>.lsp fájlt. Ez a fájl közvetlenül az acad.lsp vagy acadlt.lsp fájl betöltése előtt töltődik be a memóriába. A <verzió> a termék kiadását jelöli, például az AutoCAD és az AutoCAD 2024 alapú termékek esetében az acad2024.lsp fájl, az AutoCAD LT 2024 esetében pedig az acadlt2024.lsp fájl töltődik be.

Az ACADDOC.LSP vagy ACADLTDOC.LSP fájl

Az acaddoc.lsp vagy acadltdoc.lsp fájl arra való, hogy minden egyes dokumentum (vagy rajz) inicializálásakor be legyen töltve. Ez a fájl akkor hasznos, ha minden egyes új rajz létrehozásakor (vagy egy meglévő betöltésekor) be kíván tölteni egy AutoLISP-rutinokból álló könyvtárat.

A rajzok megnyitásakor az AutoCAD minden alkalommal megkeresi, hogy van-e egy acaddoc.lsp vagy acadltdoc.lsp fájl a könyvtárelérési útvonalon, és ha talál egyet, annak tartalmát a memóriába tölti. Az acaddoc.lsp vagy acadltdoc.lsp fájl minden rajzzal együtt betöltődik, függetlenül az ACADLSPASDOC rendszerváltozó értékétől.

A legtöbb felhasználónak csak egyetlen acaddoc.lsp vagy acadltdoc.lsp fájlja van az összes dokumentumalapú AutoLISP-rutinhoz. A termék az acaddoc.lsp vagy acadltdoc.lsp fájlt a könyvtárútvonal által definiált sorrendben keresi. Ezt kihasználva minden egyes rajzkönyvtárba kerülhet egy-egy különböző tartalmú acaddoc.lsp vagy acadltdoc.lsp fájl, amelyekkel specifikus AutoLISP-rutinokat lehet betölteni az egyes rajz- és feladattípusokhoz.

Az acaddoc.lsp vagy acadltdoc.lsp fájl tartalmazhatja egy vagy több rutin AutoLISP-kódját, de állhat load függvényhívások sorozatából is. Az utóbbi módszer előnyösebb, mivel a kód módosítása egyszerűbb. Ha acaddoc.lsp vagy acadltdoc.lsp fájlként menti a következő kódot, a mydocumentapp1.lsp, build.lsp és counter.lsp fájlok az új dokumentumok megnyitásakor minden alkalommal betöltődnek.

(load "mydocumentapp1")
(load "build")
(load "counter")
Megjegyzés: Ne módosítsa a fenntartott acad<verzió>doc.lsp vagy acadlt<verzió>doc.lsp fájlokat. Az Autodesk biztosítja a szükséges, verzióspecifikus, az AutoLISP által meghatározott funkciókat tartalmazó acad<verzió>doc.lsp vagy acadlt<release>.lsp fájlt. Ez a fájl közvetlenül az acaddoc.lsp vagy acadltdoc.lsp fájl betöltése előtt töltődik be a memóriába. A <verzió> a termék kiadását jelöli, például az AutoCAD és az AutoCAD 2024 alapú termékek esetében az acad2024doc.lsp fájl, az AutoCAD LT 2024 esetében pedig az acadlt2024doc.lsp fájl töltődik be.

MNL-fájlok és AutoLISP menü testreszabás

Amikor a termék betölt egy testreszabási (CUI/CUIx) fájlt, egyúttal egy azonos nevű .MNL kiterjesztésű fájlt is keres, és ha megtalálja, annak tartalmát a memóriába tölti. Ez a módszer biztosítja, hogy a felhasználói felület elemeinek működéséhez szükséges AutoLISP-függvényeket a program mindig betöltse.

Megjegyzés: Az AutoCAD LT nem támogatja az MNL-fájlok automatikus betöltését, de a fájlok betölthetők egy másik LISP-fájlból az AutoLISP LOAD függvényének használatával.

Ha például a termék betölt egy custom.cuix nevű testreszabási fájlt, akkor egy custom.mnl nevű fájlt fog keresni, amely számos, a felhasználói felület elemei által használt AutoLISP-függvényt határozhat meg a testreszabási fájlban. A program az MNL-fájlt az acaddoc.lsp fájl után tölti be.

Megjegyzés: Ha egy testreszabási fájlt az AutoLISP command függvényének segítségével tölt be — a szintaxis hasonló a (command "menü" "újmenü") híváshoz —, a kapcsolódó MNL-fájlt a program csak a teljes AutoLISP-rutin befejeződése után tölti be.
(command "menu" "newmenu")

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

Ebben a példában a princ függvény meghívása használható állapotüzenetek megjelenítésére. A princ függvény első meghívásakor a parancspromptban a következő üzenet jelenik meg:

Újmenü eszközök… Betöltve.

A princ második meghívására az AutoLISP-függvény befejeződik. A princ függvény második meghívása nélkül az üzenet kétszer jelenne meg. Ahogy korábban említettük, a load függvény hívásakor az onfailure argumentumot is megadhatja további óvintézkedésként.

S::STARTUP függvény: Utóinicializálás végrehajtása

A rajz inicializálása után végrehajtandó valamilyen beállítási művelet végrehajtására S::STARTUP függvényt definiálható.

Az indítási LISP-fájlok (acad.lsp vagy acadlt.lsp és acaddoc.lsp vagy acadltdoc.lsp) mindegyike betöltődik a memóriába az automatikusan betöltött MNL-fájlokkal együtt, mielőtt sor kerülne a rajz teljes körű inicializálására. Ez általában nem okoz problémát, hacsak nem szeretné használni a command függvényt, amelynek működése nem biztosított a rajz teljes inicializálása előtt.

Megjegyzés: Az AutoCAD LT nem támogatja az MNL-fájlok automatikus betöltését, de a fájlok betölthetők egy másik LISP-fájlból az AutoLISP LOAD függvényének használatával.

Ha felhasználói S::STARTUP függvény szerepel az acad.lsp vagy acadlt.lsp, acaddoc.lsp vagy acadltdoc.lsp, illetve egy MNL-fájlban, a program mindig meghívja azt egy új rajz elindításakor vagy egy meglévő rajz megnyitásakor. Így a beállítási műveletek elvégzéséhez egy S::STARTUP definíciót helyezhet el az indításkor betöltődő AutoLISP-fájlban.

Ha például a SRAFFOZ parancsot felül szeretné írni egy üzenet hozzáadásával, és át kíván térni a HSRAFFOZ parancsra, akkor használjon egy acaddoc.lsp vagy acadltdoc.lsp fájlt, amely a következőket tartalmazza:

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

A rajz inicializálása előtt a SRAFFOZ és RÉGISRAFFOZ parancs új definíciójának megadása a defun függvénnyel történik. A rajz inicializálása után a program meghívja az S::STARTUP függvényt, és törli a SRAFFOZ eredeti definícióját.

Megjegyzés: A hozzáfűzéshez az S::STARTUP függvényt a defun függvény helyett a defun-q függvénnyel kellett definiálni.

Mivel az S::STARTUP függvényt sok helyen lehet definiálni (acad.lsp vagy acadlt.lsp, acaddoc.lsp vagy acadltdoc.lsp, illetve egy ezek bármelyikéből betöltött MNL-fájl vagy egyéb AutoLISP-fájl), a korábban definiált S::STARTUP függvények felülírhatók.

A következő példa arra mutat egy módszert, hogy hogyan gondoskodhat arról, hogy az indításkor betöltődő függvény megfelelően tudjon működni a többi függvénnyel.

(defun-q MYSTARTUP ( )

... indításkor betöltődő függvény ...

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

Az előző kód az indításkor betöltődő függvényt hozzáfűzi egy meglévő S::STARTUP függvényhez, majd újradefiniálja az S::STARTUP függvényt úgy, hogy az tartalmazza a felhasználó indításkor betöltendő kódját. Ez a módszer attól függetlenül megfelelően működik, hogy létezett-e előzőleg S::STARTUP függvény.