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 három, felhasználó által definiálható fájl tartalmát töltik be automatikusan: az acad.lsp, az acaddoc.lsp és az aktuális testreszabási fájlhoz tartozó MNL-fájlt.

Alapértelmezés szerint az acad.lsp fájlt a rendszer csak egyszer tölti be a program elindításakor, ezzel ellentétben az acaddoc.lsp minden egyes dokumentumnál (vagy rajznál) betöltődik. Ez lehetővé teszi, hogy az acad.lsp fájl betöltésére az alkalmazás indításakor, az acaddoc.lsp fájl betöltésére pedig a dokumentum (vagy rajz) indításakor kerüljön sor. 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 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 és az acaddoc.lsp induláskor betöltődő fájlok nem részei az AutoCAD-alapú programoknak. Ezeket a felhasználónak kell létrehoznia és karbantartania.

Megjegyzés: Az AutoCAD 2014-alapú termékektől kezdődően a felhasználói alkalmazásokat biztonságos módban kell futtatni, amennyiben a SECURELOAD rendszerváltozó értéke 1 vagy 2. Biztonságos módban történő futtatáskor a program 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é. A következő kód hozzáadása az acaddoc.lsp fájlhoz automatikusan betölti a PARANCS1, a PARANCS2 és a PARANCS3 parancsot a cmds.lsp fájlból, valamint az ÚJPARANCS 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 tartalmazza az ObjectARX-alkalmazások számára.

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 fájl

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

Mivel az acad.lsp fájlt csak az alkalmazásspecifikus indítási rutinok esetében lehet használni, az acad.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, áthelyezheti az acad.lsp fájlból az acaddoc.lsp fájlba.

Az acad.lsp és acaddoc.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 fájl csak egyszer töltődik be: az alkalmazás indításakor. Ha értéke 1, akkor a program az acad.lsp fájlt minden egyes új rajz létrehozásánál vagy egy meglévő megnyitásánál betölti.

Az acad.lsp fájl tartalmazhat egy vagy több rutinhoz tartozó AutoLISP-kódot, illetve állhat fájlbetöltő 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 fájlként menti a következő kódot, a mysessionapp1.lsp, a databasesynch.lsp és a 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 fájlt. Az Autodesk biztosítja a szükséges, verzióspecifikus AutoLISP-meghatározású funkciókat tartalmazó acad<verzió>.lsp fájlt. Ez a fájl közvetlenül az acad.lsp fájl betöltése előtt kerül a memóriába. A <verzió> az AutoCAD-alapú termék verzióját jelöli; az acad2023.lsp például az AutoCAD 2023-alapú termékek által betöltött fájl.

Az ACADDOC.LSP fájl

Az acaddoc.lsp fájl minden egyes dokumentum (vagy rajz) inicializálásához hozzátartozik. 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 egy acaddoc.lsp fájlt keres a könyvtárelérési útvonalon. és ha talál egyet, annak tartalmát a memóriába tölti. Az acaddoc.lsp fájl minden rajz esetén betöltődik, függetlenül az ACADLSPASDOC rendszerváltozó értékétől.

A legtöbb felhasználó egyetlen acaddoc.lsp fájllal rendelkezik az összes dokumentum alapú AutoLISP-rutinhoz. A program az acaddoc.lsp fájlt a könyvtárelérési útvonal által definiált sorrendben keresi. Ezt kihasználva minden egyes rajzkönyvtárban más tartalmú acaddoc.lsp fájl kerülhet, amelyek specifikus AutoLISP-rutinokat tölthetnek le az egyes rajz- és feladattípusokhoz.

Az acaddoc.lsp fájl tartalmazhatja egy vagy több rutin AutoLISP-kódját, de állhat fájlbetöltő 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 fájlként menti a következő kódot, a mydocumentapp1.lsp, a build.lsp és a 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 fájlt. Az Autodesk biztosítja a szükséges, verzió-specifikus AutoLISP-meghatározású funkciókat tartalmazó acad<verzió>doc.lsp fájlt. Ez a fájl közvetlenül az acaddoc.lsp fájl betöltése előtt kerül a memóriába. A <verzió> az AutoCAD-alapú termék verzióját jelöli; az acaddoc2023.lsp például az AutoCAD 2023-alapú termékek által betöltött fájl.

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

Amikor a program egy testreszabási (CUI/CUIx) fájlt tölt be, 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.

Az acad.cuix testreszabási fájl például az acad.mnl fájlt keresi, amely számos, a felhasználói felület elemei által használt AutoLISP funkciók határoz 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 parancspromptnál 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. Ahogyan az előzőekben olvashatta, a load függvény hívásakor a hibakezelés argumentum megadásával különleges óvintézkedéseket is tehet.

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ó.

A LISP-fájlokat (acad.lsp, acaddoc.lsp és MNL) a program még a rajz teljes inicializálása előtt betölti a memóriába. 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.

Ha felhasználói S::STARTUP függvény szerepel az acad.lsp, acaddoc.lsp vagy MNL-fájlban, a program 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 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, acaddoc.lsp és MNL-fájlban, vagy ezek bármelyikéből betöltött AutoLISP-fájlban), a korábban definiált S::STARTUP függvény felülírható.

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.