AutoLISP 是功能強大的生產力工具,可讓您自動執行工作流程並延伸 AutoCAD LT 的功能。
雖然 AutoLISP 不是新功能,但 AutoCAD LT 從 2024 版開始提供。
在 AutoCAD LT 中實施 AutoLISP,可讓您執行過去近 40 年開發具有某些限制的大多數 AutoLISP 程式。雖然您不需要是 AutoLISP 的專家,就能利用許多既有的程式,但學習 AutoLISP 程式設計是一項可以解鎖未開發生產力的技能。
AutoLISP 程式通常儲存在副檔名為 .lsp 的文字檔。在學習 AutoLISP 程式設計的某些基礎之前,學習載入 AutoLISP 檔是您在以下練習中首先學習的其中一項內容。另外,您不需要先前的程式設計經驗,就能利用 AutoLISP。在許多情況下,您真正需要的只是一些新概念,以及您目前對 AutoCAD 指令和系統變數的了解。
第一次使用 AutoLISP 而不是編寫您自己的程式時,您可能會載入線上找到的 AutoLISP 檔或您公司建立的 AutoLISP 檔。可以載入 AutoLISP 檔的時機:
使用以下方法可以在啟動時、開啟圖面時,或手動載入 AutoLISP 檔。
| 啟動時載入 | 手動載入 |
|---|---|
|
|
如您所見,AutoCAD LT 能夠以多種方式載入 AutoLISP 檔。您使用的方法取決於製圖環境的規劃。現在,我們要來看看使用「載入/卸載應用程式」對話方塊載入 AutoLISP 檔。
APPLOAD 也可於指令提示下輸入。


如果您安裝的語言不是英文,例如 jp-jp,請選取該資料夾,而不是 en-us。
acadlt2024doc.lsp 檔是 AutoCAD LT 會搜尋的其中一個特殊命名 AutoLISP 檔,如果找到就載入到開啟或建立的每個圖面中。此 AutoLISP 檔包含產品所使用的某些指令和自訂 AutoLISP 函數。在這裡我只是用它做為範例檔案。
在訊息方塊中,「acadlt2024doc.lsp 成功載入」會顯示在對話方塊的左下角和指令行視窗中。

這會啟動 AutoLISP 在 acadlt2024doc.lsp 中定義的 DDGRIPS 指令。DDGRIPS 指令會開啟「選項」對話方塊,並將「選取」頁籤設定為目前頁籤。
在上一個練習中,您使用了 DDGRIPS 指令。我知道您會好奇,您要如何知道這是載入的 AutoLISP 檔中的指令。有時,程式可能會使用某些程式碼,將訊息直接放在指令行視窗中,您就會知道哪些指令已定義,並且可以使用。但是,這並非永遠都如此,您可能必須開啟 AutoLISP 檔才能知道定義了哪些指令。您可以使用記事本開啟 AutoLISP 檔。
以下影像展示在記事本中開啟的一部分 acadlt2024doc.lsp 檔。在指令提示下可以輸入的 AutoLISP 定義指令字首為 c:。c: 後接的文字是指令的名稱。

雖然在使用之前,您不必在特定位置儲存您下載或建立的 AutoLISP 檔,但建議將其儲存在共用位置。與圖面樣板和圖塊資源庫類似,您要確保團隊或公司中的所有製圖者都可以存取相同的 AutoLISP 檔。您應該考慮:
識別儲存 AutoLISP 檔的資料夾後,您需要使用「選項」對話方塊的「檔案」頁籤上的「支援檔搜尋路徑」和「可信任的位置」設定,通知 AutoCAD LT 資料夾所在的位置。AutoCAD LT 因為以下原因需要知道 LSP 檔的位置:
下列步驟展示如何將資料夾 C:\AutoLISP Files 加入「支援檔搜尋路徑」和「可信任的位置」設定。您稍後將使用此位置建立一個包含幾個簡短 AutoLISP 程式的 LSP 檔。
列示的資料夾是 AutoCAD LT 在用於儲存填充線樣式、線型、指令別名,以及定義新使用者介面元素的其他類型自訂檔案中尋找 AutoLISP 檔的位置。


資料夾就會加入至清單的底部。


資料夾就會加入至清單的底部。

除了將包含 AutoLISP 檔的資料夾標記為唯讀,並將這些資料夾識別為可信任的資料夾外,AutoCAD LT 還提供一些其他設定,以協助保護 AutoCAD LT 免於受到惡意程式碼和惡意程式的威脅。您可以執行以下作業來存取 AutoCAD LT 的安全性設定:

能夠載入和管理您在線上找到或您公司已有的 AutoLISP 檔,只是使用 AutoCAD LT 中的 AutoLISP 開始提高生產力的第一步。您在日常工作流程中開始使用既有 AutoLISP 檔的 AutoLISP 程式後,有一天您可能會想要變更這些程式,或甚至撰寫您自己的基本 AutoLISP 程式。
您可能會想,AutoLISP 是程式設計語言,但您不是程式設計師。雖然 AutoLISP 的確是程式設計語言,但您不必是程式設計師就能學習和撰寫 AutoLISP 程式。最簡單的 AutoLISP 程式是單一陳述式,可讓您執行指令或變更系統變數的值。
AutoLISP 陳述式以左括弧開頭,以右括弧結尾。以下是一個 AutoLISP 陳述式的範例,使用 ORTHOMODE 系統變數開啟「正交模式」。
(setvar "orthomode" 1)
與指令和系統變數名稱類似,在 AutoCAD LT 的指令提示下可以輸入 AutoLISP 陳述式。我們來試試看:
停用時,狀態列按鈕會以灰色顯示。

狀態列上的「正交模式」按鈕現在應該已啟用且為藍色。

恭喜您撰寫了第一個 AutoLISP 陳述式!您現在是程式設計師了!
先前的 AutoLISP 陳述式使用 setvar 函數設定系統變數的值。還有一個函數名為 getvar,可傳回系統變數的目前值。setvar 和 getvar 函數只是使用 AutoLISP 可自動執行工作流程的數百個函數當中的兩個。雖然 AutoLISP 程式設計語言包含數百個函數,但您只需瞭解五個關鍵函數即可開始使用。其中兩個您剛剛學到了。這五個函數為:
現在您知道五個關鍵函數,也已經使用 setvar 函數設定系統變數,接下來我們看一下使用 command 函數。繼續之前,您要知道指令名稱可以用 . (句點) 和 _ (底線) 字元做為字首,而指令選項名稱可以用 _ (底線) 字元做為字首。這些字元用於確保提供的指令如預期般執行。
以下是這些字元的涵義說明:
在以下步驟中,您將使用 command 函數繪製一個圓,然後縮放至圖面的實際範圍。
在目前圖層上的 5,5 就會繪製一個半徑為 5 個單位的圓。

如果圖面中唯一的物件是圓,則圖面將縮放至圓的實際範圍,否則將縮放至圖面中所有物件的實際範圍。

到目前為止您已經看到一些 AutoLISP 陳述式,接下來我們將詳細瞭解範例 AutoLISP 陳述式的各個部分和語法:
雖然直接在指令提示下輸入 AutoLISP 陳述式是一個可以開始學習 AutoLISP 的好方式,因為您會即時收到回饋,但在指令提示下重複一直鍵入陳述式不是很有效率。一個可讓您重複使用 AutoLISP 陳述式的方法是使用 defun 函數將陳述式分組為一個自訂指令。
我們來試試看 defun 函數,並定義一個名為 ZP 的自訂指令來縮放至圖面的前一個視圖:
C:ZP 會輸出到 command。

會還原成前一個視圖。

現在會還原成前一個視圖。
即使您可以使用 defun 函數定義自訂指令,更輕鬆地重複使用 AutoLISP 陳述式,但是您定義的指令只能在定義這些指令的圖面中,而且圖面保持開啟狀態時才能使用。在下一節中,您將學習如何建立 AutoLISP 檔儲存自訂 AutoLISP 指令,以及您在載入 AutoLISP 檔時可能要執行的 其他 AutoLISP 陳述式。
您可以在 AutoLISP 參考指南 (英文) 中進一步瞭解這五個關鍵函數,以及其他數百個可用的函數。
現在,您已知道如何在指令提示下輸入 AutoLISP 表示式,接下來我們看看如何建立 AutoLISP 檔並儲存您的 AutoLISP 表示式和自訂指令,當您需要時就可以使用。AutoLISP 檔是純 ASCII 文字檔,可以使用簡單的文字編輯器 (例如記事本) 建立,副檔名為 .lsp。不建議使用文字處理應用程式 (例如 Write 或 Word),因為這類應用程式會引入專用的字元和格式,在載入 LSP 檔時可能會導致問題發生。
在下一個練習中,您將學習如何建立 LSP 檔、將某些 AutoLISP 陳述式加入 LSP 檔、載入 LSP 檔,然後嘗試使用 LSP 檔中定義的指令。除了上述五個關鍵函數外,您還將瞭解:
我們現在來建立自己的檔案,然後載入到 AutoCAD LT 中:
; Zoom commands (defun c:ze () (command "._zoom" "_e")) (defun c:zp () (command "._zoom" "_p")) ; Creates the layer A-ANNO-REV, draws a rectangle and ; converts the rectangle to a revision cloud with arc lengths ; based on half the current value of the LTSCALE system variable (defun c:rv () (setq old-layer (getvar "clayer")) (command "._-layer" "_m" "A-ANNO-REVCLD" "_c" "1" "" "") (command "._rectang" PAUSE PAUSE) (command "._revcloud" "_a" (/ (getvar "ltscale") 2) "" "_o" "_l" "_n") (setvar "clayer" old-layer) ) ; Display a general message in the command line upon load (prompt "\nLoaded MyFirst.lsp") (princ)

如果您的程式需要使用 Unicode 字元,請選取「UTF-8」。
現在您建立了檔案,不要使用透過 APPLOAD 指令顯示的「載入/卸載應用程式」對話方塊,請使用「檔案總管」載入 LSP 檔。


載入後,您應該會在指令行視窗歷程中看到 prompt 函數顯示的訊息「Loaded MyFirst.lsp」。

請注意,修訂雲形為紅色,放置在圖層 A-ANNO-REVCLD 上。您可以從功能區的「圖層」面板或「性質/快速性質」選項板上的「圖層」下拉式清單中看到。

圖面會縮放至其實際範圍。
會還原成圖面的前一個視圖。
使用「載入/卸載應用程式」對話方塊不僅可依需要手動載入 AutoLISP 檔,還可在開啟或建立新圖檔時自動載入 AutoLISP 檔。「載入/卸載應用程式」對話方塊的「啟動套件」區域可用於指定要自動載入的 AutoLISP 檔。
以下是將 AutoLISP 檔加入啟動套件的步驟:
APPLOAD 也可於指令提示下輸入。
如果您在上一節建立了 myfirst.lsp 檔,可以選取該檔案。
您加到啟動套件中的 AutoLISP 檔會自動載入到目前圖面中。
當 AutoCAD LT 啟動或建立/開啟圖面時,AutoCAD LT 會尋找四個具有特定名稱的 AutoLISP 檔。如果找到檔案,則會自動載入這些檔案。這些檔案有助於確保 AutoCAD LT 環境如預期般規劃,以及您的 AutoLISP 定義指令在建立或開啟圖面時可用。
AutoCAD LT 會在其支援路徑中尋找這四個檔案,如果找到就會自動載入:
acadlt.lsp 和 acadltdoc.lsp 必須由您建立;它們不是標準 AutoCAD LT 安裝的一部分。acadlt2024.lsp 和 acadltdoc2024.lsp 隨附於程式中,不能修改。
您可以如任何其他 LSP 檔一樣使用 acadlt.lsp 和 acadltdoc.lsp 檔,並根據前面提到的脈絡自動載入這些檔案。使用這兩個檔案可透過 AutoLISP load 函數載入其他 AutoLISP 檔、在載入這些檔案時執行 AutoLISP 陳述式,並定義 AutoLISP 指令定義,在建立或開啟圖面後就可以使用這些檔案。AutoLISP load 函數接受兩個參數:要載入的 AutoLISP 檔 (這是必要參數),第二個選擇性參數是如果在 AutoCAD LT 其中一個支援檔搜尋路徑中找不到要載入的 AutoLISP 檔,要顯示的訊息。請參閱〈管理和保護 AutoLISP 檔〉一節,瞭解如何設定支援檔搜尋路徑。
下列步驟說明如何在 C:\AutoLISP Files 資料夾中建立 acadltdoc.lsp 檔,將一些 AutoLISP 陳述式加入檔案,將檔案載入到 AutoCAD LT,然後確認檔案已載入。
; AutoLISP to be executed in each drawing created or opened ; Set Object Snap and Ortho modes (setvar "osmode" 4133) (setvar "orthomode" 1) ; Load the LSP file created earlier under the ; "Store AutoLISP Statements in AutoLISP (LSP) Files" section (load "myfirst.lsp" "\nMyFirst.lsp file couldn't be found") ; Display a general message in the command line upon load (prompt "\nLoading my custom programs") (princ)

在指令行視窗中,您應該會看到「Loading my custom programs」訊息,這是您之前在步驟 2 輸入最後兩行的其中一行。


狀態列按鈕應該會再次啟用。

外掛程式組合是一個包含名為 PackageContents.xml 之資訊清單檔案的資料夾結構,此檔案會告訴 AutoCAD LT 組成外掛程式的檔案和設定。雖然您在本文學到,將 AutoLISP 程式載入到 AutoCAD LT 中不需要外掛程式套件,但與使用 acadlt.lsp 或 acadltdoc.lsp 檔相比,使用外掛程式套件可以更輕鬆地管理 AutoLISP 檔,並且是部署自訂程式一個安全的方式。在大多數情況下,外掛程式套件也可協助規劃 AutoCAD LT 而不需要「選項」對話方塊。
如需外掛程式套件的資訊,請參閱範例:外掛程式的基本 .bundle 資料夾結構。
自動執行工作流程有助於提高生產力並減少重複工作。雖然 AutoLISP 程式設計確實有學習曲線,但如果您堅持學習五個關鍵函數,就可以製作一些小程式來協助您瞭解 AutoLISP 在日常工作流程中的價值。
以下是一些與 AutoLISP 相關的常用指令和系統變數。
| 指令 | 描述 |
|---|---|
| APPAUTOLOADER | 列示或重新載入應用程式外掛程式資料夾中的所有外掛程式。 |
| APPLOAD | 載入和卸載應用程式,並定義啟動時載入的應用程式。 |
| OPTIONS | 自訂程式設定。 |
| SECURITYOPTIONS | 控制在產品中執行可執行檔的安全性限制。 |
| UNDEFINE | 允許以應用程式定義的指令取代內部指令。 |
| 系統變數 | 描述 | 預設值 | 儲存位置 |
|---|---|---|---|
| ACADLSPASDOC | 控制要將 acad.lsp 檔或 acadlt.lsp 檔 (適用於 AutoCAD LT) 載入每個圖面,還是只載入階段作業中開啟的第一個圖面。 | 0 | 登錄 |
| APPAUTOLOAD | 控制何時載入外掛應用程式。 | 14 | 登錄 |
| CLAYER | 設定目前的圖層。 | 0 | 圖面 |
| CLIPROMPTUPDATE | 控制指令行是否顯示 AutoLISP 或腳本檔案正在執行時所產生的訊息和提示。 | 1 | 登錄 |
| CMDDIA | 控制「現地文字編輯器」對於 DIMEDIT 和 QLEADER 指令,以及 AutoCAD 產品中特定對話方塊的顯示。 | 1 | 登錄 |
| CMDECHO | 控制在執行 AutoLISP command 函數時,是否對提示和輸入做出回應。 | 1 | 未儲存 |
| FILEDIA | 抑制檔案導覽對話方塊的顯示。 | 1 | 登錄 |
| LEGACYCODESEARCH | 控制搜尋可執行檔時是否要同時搜尋程式啟動時所在的資料夾。 | 0,可能由 CAD 管理員鎖住 | 登錄 |
| NOMUTT | 抑制通常不會被抑制的訊息顯示 (靜謐)。 | 0 | 未儲存 |
| ORTHOMODE | 將游標移動約束為互垂。 | 0 | 圖面 |
| OSMODE | 設定常駐式物件鎖點。 | 4133 | 登錄 |
| SECURELOAD | 控制是否限制只能從可信任的資料夾載入可執行檔案。 | 1,可能由 CAD 管理員鎖住 | 登錄 |
| TEXTEVAL | 控制如何演算使用 TEXT (使用 AutoLISP) 或 -TEXT 輸入的文字字串。 | 0 | 未儲存 |
| TRUSTEDPATHS | 指定哪個資料夾擁有權限可以載入並執行包含程式碼的檔案。 | 不一定,可能由 CAD 管理員鎖住 | 登錄 |