如何自動加載和運行AutoLISP程序
發(fā)布時間:2023-07-26 08:55 [ 我要自學網(wǎng)原創(chuàng) ] 發(fā)布人: samohu 閱讀: 4589

可以在啟動時加載 AutoLISP 程序,并在繪圖任務期間在特定的時間執(zhí)行命令或函數(shù)。

基于 AutoCAD 的產品將自動加載用戶可定義的三個文件的內容:acad.lspacaddoc.lsp 和當前自定義文件附帶的 MNL 文件。

默認情況下,acad.lsp 文件僅在啟動程序時加載一次,而 acaddoc.lsp 可隨每個文檔(或圖形)一起加載。這樣可使用戶將加載“acad.lsp”文件和啟動應用程序相關聯(lián),將“acaddoc.lsp”文件和文檔或圖形啟動相關聯(lián)。通過更改 ACADLSPASDOC 系統(tǒng)變量的設置,可以修改加載這些啟動文件的默認方法。

如果這些文件之一定義了特殊類型的 S::STARTUP 函數(shù),則此函數(shù)在圖形初始化完成后立即運行。另外,APPLOAD 命令提供了“啟動組”選項,用于加載指定的應用程序,而無需編輯任何文件。

acad.lsp  acaddoc.lsp 啟動文件不隨基于 AutoCAD 的產品一起提供。這些文件可以由用戶來創(chuàng)建和維護。

注: 從基于 AutoCAD 2014 的產品開始,當 SECURELOAD 系統(tǒng)變量設定為 1 或 2 時,自定義應用程序必須在安全模式下工作。在安全模式下進行操作時,程序限制為從受信任的位置加載和執(zhí)行包含代碼的文件;受信任的位置由 TRUSTEDPATHS 系統(tǒng)變量指定。

自動加載命令

當加載 AutoLISP 文件時,文件中的命令定義會占用內存,不管是否實際使用了這些命令。AutoLISP autoload 函數(shù)無需將整個程序加載到內存中即可使某個命令可用。將下列代碼添加到 acaddoc.lsp 文件將自動加載 cmds.lsp 文件的 CMD1、CMD2 和 CMD3 命令和 newcmd.lsp 文件的 NEWCMD 命令。

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

第一次在命令提示下輸入自動加載的命令時,AutoLISP 將從關聯(lián)文件加載完整的命令定義。AutoLISP 還提供用于 ObjectARX 應用程序的 autoarxload 函數(shù)。

注: 名稱相似的 AutoLISP 啟動文件的加載由它們的編輯時間決定。除非指定完整的文件名(包括文件擴展名),否則將加載最近編輯過的 LSP 文件。

ACAD.LSP 文件

如果定期使用特定的 AutoLISP 程序,則可以創(chuàng)建一個“acad.lsp”文件。啟動 AutoCAD 時,將搜索 acad.lsp 文件的支持文件搜索路徑。找到“acad.lsp”文件后,會將其加載到內存。

由于“acad.lsp”文件用于特定應用程序的啟動程序,因此“acad.lsp”文件中定義的所有函數(shù)和變量只能在第一個圖形中使用。應該把需要在所有文檔中使用的程序從“acad.lsp”文件移到“acaddoc.lsp”文件。

可以用 ACADLSPASDOC 系統(tǒng)變量替代建議使用的 acad.lsp  acaddoc.lsp 功能。如果 ACADLSPASDOC 系統(tǒng)變量設定為 0(默認設置),則“acad.lsp”文件僅加載一次,即在應用程序啟動時加載。如果設定為 1,則在創(chuàng)建新圖形或打開現(xiàn)有圖形時,將重新加載 acad.lsp 文件。

“acad.lsp”文件可以包含一個或多個程序的 AutoLISP 代碼,也可以僅包含一系列 load 函數(shù)調用。后一種方法比較合適,因為對它的修改比較簡單。如果將以下代碼另存為 acad.lsp 文件,則文件 mysessionapp1.lsp、databasesynch.lsp  drawingmanager.lsp 將在每次啟動程序時加載。

(load "mysessionapp1") (load "databasesynch") (load "drawingmanager")

注: 請勿修改保留的 acad<版本>.lsp 文件。Autodesk 提供 acad<版本>.lsp 文件,其中包含所需的、版本特定的且由 AutoLISP 定義的函數(shù)。此文件在加載“acad.lsp”文件之前加載到內存。<版本> 表示基于 AutoCAD 的產品的版本;例如,acad2015.lsp 可能是由基于 AutoCAD 2015 的產品加載的文件。

ACADDOC.LSP 文件

acaddoc.lsp 文件用于與每個文檔(或圖形)的初始化關聯(lián)。如果每次啟動新圖形(或打開現(xiàn)有圖形)時都要加載某個 AutoLISP 程序庫,則此文件很有用。

每次打開圖形時,AutoCAD 都在庫路徑中搜索“acaddoc.lsp”文件。如果找到該文件,就把它加載到內存中。無論如何設置 ACADLSPASDOC,acaddoc.lsp 文件始終與每個圖形一起加載。

大多數(shù)用戶會對所有基于文檔的 AutoLISP 例行程序采用“acaddoc.lsp”文件。程序根據(jù)庫路徑中定義的次序搜索 acaddoc.lsp 文件。因此,使用此功能,可以在每個圖形目錄下放置不同的 acaddoc.lsp 文件,這樣可以對某些類型的圖形或作業(yè)加載特定的 AutoLISP 程序。

acaddoc.lsp 文件可以包含一個或多個程序的 AutoLISP 代碼,也可以僅包含一系列 load 函數(shù)調用。后一種方法比較合適,因為對它的修改比較簡單。如果將下列代碼另存為 acaddoc.lsp 文件,則在每次打開新文檔時,將加載文件 mydocumentapp1.lsp、build.lsp  counter.lsp。

(load "mydocumentapp1") (load "build") (load "counter")

注: 請勿修改保留的 acad<版本>doc.lsp 文件。Autodesk 提供 acad<版本>doc.lsp 文件,其中包含所需的、版本特定的且由 AutoLISP 定義的函數(shù)。此文件在加載“acaddoc.lsp”文件之前加載到內存。<版本> 表示基于 AutoCAD 的產品的版本;例如,acad2015doc.lsp 可能是由基于 AutoCAD 2015 的產品加載的文件。

MNL 文件和 AutoLISP 菜單自定義

當程序加載自定義 (CUI/CUIx) 文件時,將搜索具有匹配文件名的 MNL 文件。如果找到該文件,就把它加載到內存中。此功能可以確保加載正確操作用戶界面元素所需的 AutoLISP 函數(shù)。

例如,自定義文件 acad.cuix 將查找文件 acad.mnl,它可能定義在自定義文件中由用戶界面元素所使用的許多 AutoLISP 函數(shù)。MNL 文件在“acaddoc.lsp”文件后加載。

注: 如果用 AutoLISP command 函數(shù)加載自定義文件(其語法類似于 (command "menu" "newmenu")),則在整個 AutoLISP 程序運行后,才加載關聯(lián) MNL 文件。

(command "menu" "newmenu") (princ "Newmenu utilities… Loaded.") (Princ)

在此例中,調用 princ 函數(shù)可用于顯示狀態(tài)消息。第一次使用 princ 時,將在命令提示下顯示如下信息:

新菜單實用工具…已加載。

第二次調用 princ 函數(shù)將退出 AutoLISP 函數(shù)。如果不對 princ 函數(shù)進行第二次調用,則剛才顯示的消息將會再次顯示。像以前提到的那樣,可以在 load 函數(shù)調用中包含 onfailure 參數(shù)作為額外的預防措施。

S::STARTUP 函數(shù):初始化之后執(zhí)行

用戶可以定義 S::STARTUP 函數(shù),以在圖形初始化之后執(zhí)行所需的啟動操作。

啟動 LISP 文件(“acad.lsp”、“acaddoc.lsp”和 MNL)在圖形完成初始化之前已全部加載到內存中。通常這并不會造成問題,除非使用了 command 函數(shù),此函數(shù)在圖形初始化前不能保證正常工作。

如果用戶定義的函數(shù) S::STARTUP 包含在 acad.lsp、acaddoc.lsp 或 MNL 文件中,則輸入新圖形或打開現(xiàn)有圖形時將調用此函數(shù)。因此,可以在 AutoLISP 啟動文件中包含 S::STARTUP 函數(shù)的定義以執(zhí)行任何設置操作。

例如,如果要通過添加一條消息然后切換到 BHATCH 命令來替代標準 HATCH 命令,請使用包含以下代碼的 acaddoc.lsp 文件:

(defun C:HATCH ( )  (alert "Using the BHATCH command!")  (princ " Enter OLDHATCH to get to real HATCH command. ")  (command "BHATCH")  (princ) ) (defun C:OLDHATCH ( )  (command ".HATCH")  (princ) ) (defun-q S::STARTUP ( )  (command "undefine" "hatch")  (princ " Redefined HATCH to BHATCH! ") )

圖形初始化之前,用 defun 函數(shù)定義了 HATCH 和 OLDHATCH ,命令的新定義。圖形初始化之后,S::STARTUP 函數(shù)被調用并且 HATCH 命令的標準定義被解除。

注: 還需提及的是,S::STARTUP 函數(shù)必須使用 defun-q 函數(shù)而不是 defun 定義。

由于 S::STARTUP 函數(shù)可以在許多位置(“acad.lsp”、“acaddoc.lsp”、MNL 文件或從這些文件中加載的其他任何 AutoLISP 文件)定義 ,因此可以替換先前定義的 S::STARTUP 函數(shù)。

下例顯示了一種確保啟動函數(shù)與其他函數(shù)協(xié)同工作的方法。

(defun-q MYSTARTUP ( )

... your startup function ...

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

上面的代碼把啟動函數(shù)附加到現(xiàn)有的 S::STARTUP 函數(shù)中,然后重定義 S::STARTUP 函數(shù)以包含該啟動代碼。不管以前的 S::STARTUP 函數(shù)是否存在,它都可以正常工作。

,
AutoCAD2023視頻教程
我要自學網(wǎng)商城 ¥80 元
進入購買
文章評論
0 條評論 按熱度排序 按時間排序 /350
添加表情
遵守中華人民共和國的各項道德法規(guī),
承擔因您的行為而導致的法律責任,
本站有權保留或刪除有爭議評論。
參與本評論即表明您已經(jīng)閱讀并接受
上述條款。
V
特惠充值
聯(lián)系客服
APP下載
官方微信
返回頂部
分類選擇:
電腦辦公 平面設計 室內設計 室外設計 機械設計 工業(yè)自動化 影視動畫 程序開發(fā) 網(wǎng)頁設計 會計課程 興趣成長 AIGC