March 30, 2023 原文出處:Autodesk Blogs, 原文作者:Frank Mayfield, 來源網址:連結
最新發布的AutoCAD LT 2024首次支援AutoLISP,讓企業團隊能夠優化工作流程、強制實施CAD標準、自動化處理重複性高且耗時的操作。
對於AutoCAD LT社群來說,這是一個好消息。因為不僅是AutoCAD LT用戶有一個新的工具可以探索,而是整體AutoCAD的用戶都能使用AutoLISP,豐富的AutoCAD網路社群資源,讓您不必成為一名程式設計師就能使用它。
但是,大多數現有的AutoCAD LT用戶可能不了解AutoLISP。為什麼呢?因為您以前不能使用它,沒有人會學習一個他們無法使用的功能或程式語言。但是,有些人可能對AutoLISP可以做什麼有一定程度的認識。這兩種用戶群體對AutoLISP可能有很多疑問,現在有了AutoLISP,可以用它做什麼?在哪裡可以找到程式碼?一旦您取得程式碼,該怎麼處理它?
別擔心!這篇文章將帶領初學者探索AutoLISP,如何運用AutoLISP程式碼來幫助您完成日常工作。
AutoLISP 簡介
AutoLISP是Lisp程式語言的一個延伸,Lisp語言開發於1958年,是仍在使用中的第二古老的程式語言,僅次於Fortran。AutoLISP於1986年添加到AutoCAD版本2.18中,作為一個開發介面來擴充軟體功能。
您不僅可以使用它來自動化操作程序,類似腳本(但比腳本更強大),而且讓AutoCAD使用者以熟悉的方式使用。例如,AutoLISP可以讓您在AutoCAD選取點、選取物件、透過指令行輸入、或是搭配使用DCL(對話框控制語言)建立的對話視窗讓使用者輸入。
AutoLISP快速入門的訣竅
AutoLISP在AutoCAD和AutoCAD LT之間最重要的區別之一,是AutoCAD LT沒有包含Visual LISP IDE集成開發環境(VLIDE),VLIDE集成到完整版的AutoCAD中,是AutoLISP程式碼編寫和測試除錯的好工具。
雖然使用LISP編輯器很方便,但是用或不用都可以,因為AutoLISP即使對於非程式開發者來說也容易使用,而它容易使用的原因之一,AutoCAD LT自己就是運行程式碼的直譯器,換句話說,您可以在指令行輸入一段AutoLISP程式碼來運行。
這對您有什麼好處?舉例來說,使用AutoLISP進行數學運算。您會發現,使用程式碼會比使用QuickCalc(快速計算器)工具或甚至Windows計算機更快。只是對您來說,程式碼的語法可能有點奇怪,因為運算符號或是函數會放前面,例如計算2加2,您要輸入(+ 2 2)。它會回傳計算結果4。請記住,AutoLISP的語句始終只能回傳一個值。這意味著您可以在AutoCAD操作提示中使用AutoLISP程式碼來回應。
假設您在操作AutoCAD LT的指令過程中被要求輸入距離,而您需要先計算該值才能輸入。我們假設距離的計算式是 Pi 乘以12除以2,就可以在提示輸入距離的時候輸入(/ (* pi 12) 2),AutoLISP就會回傳18.8496作為輸入距離(計算結果取決於您設置的單位而定)。
如果你希望在多重引線中以字串型式顯示值呢?在AutoCAD LT提示輸入文字時,輸入 (rtos (/ (* pi 12) 2) 4 2)。這個 rtos 函數會將數值轉換成文字字串,例如,在這個例子中,輸出為 1' - 6 3/4"。
另一個範例,假如您需要選取一個複雜的物件集進行繪圖或編輯,通常需要反覆選取物件好幾次。當您使用AutoLISP就不是問題。先輸入(setq SS (ssget))。ssget函數會提示您選擇物件,請像平常一樣選取您的複雜物件集合。
程式碼中的(setq)會將您選取的物件分配給變數SS,AutoLISP會在開啟圖檔的狀態下記住它,這為重用它提供一個簡單的機制,下次您需要再次選取這個複雜的物件集合時,只要在指令行輸入!SS,就會自動選取完全相同的物件集合。
當您學會上述這些小技巧時,只要把常用的程式碼複製到一個文字檔中,就可以重複使用,經常只需要稍微編輯一下參數文字,然後複製貼上即可!
只是有一個注意事項,就是AutoLISP程式碼只能使用純文字,不能使用任何格式化,所以使用記事本保存或編輯程式碼就非常適合,而複雜的文字編輯程式可能不適合(例如Word)。
載入和執行AutoLISP檔案
雖然在指令行輸入運行AutoLISP程式碼很好用,但是您可能會在網路上找到完整的AutoLISP程式碼,這樣一次執行一連的串程式碼會更有幫助。這些程式碼通常會寫在一個具有附檔名 .lsp 的單一檔案中,因此,您需要知道如何載入.lsp檔案,以及知道需要做什麼才能使用它們。
注意:AutoCAD LT還能支援載入和執行 .vlx 和 .fas 檔案,但是它們都是編譯格式,所以您無法像.lsp檔一樣開啟檢視或編輯它們。
載入AutoLISP程式碼檔案(.lsp)最簡單的方法是使用APPLOAD指令。您也可以在功能區的「管理」頁籤中找到它的圖示。執行該指令會顯示「載入/卸載應用程式」對話方塊,您可以在此找到您的AutoLISP檔案,然後點擊載入。雖然操作非常簡單,但是每次開啟圖面都必須進行這個操作,因為在預設情況下,AutoLISP檔案不會被永久載入。請查找「載入/卸載應用程式」對話方塊的右下角,有一個名為「啟動套件」的區域。如果您將檔案添加在這裡,AutoCAD LT就會在每次打開圖面時載入這個AutoLISP程式碼檔案。
AutoCAD LT 說明:「載入/卸載應用程式」對話方塊
另外,您也可以在指令行輸入 AutoLISP 程式碼來開啟.lsp程式碼檔案,只要在指令行輸入 (load “filename.lsp”) 即可。但前提是該檔案必須在定義的支援搜尋路徑中,否則您必須在指令的檔名前面提供完整路徑。這需要具備一些 AutoLISP 的知識,初學者可能不會想要使用這種方法。
還有一個很棒的訣竅,只要將AutoLISP的程式碼檔案拖放到AutoCAD LT的視窗中,程式碼就會被載入,就可以開始使用了。
您已經學會如何載入AutoLISP檔案,但是如何使用它呢?有些程式設計師會在執行AutoLISP程序的過程中,友善地告訴您要輸入或操作什麼,所以只要注意指令行的提示紀錄就好。但如果沒有,您就必須用記事本打開AutoLISP檔案,找到定義如何運行程式的那一行。在程式碼中找到以下內容:
(defun C:commandNameHere ...
大小寫沒有影響,不必擔心,先找到defun(用於定義AutoLISP中的函數)和C:。C:後面的英文字就是指令名稱。您只要在AutoCAD LT載入這個AutoLISP檔案後,在指令行輸入這個指令名稱就可以運行AutoLISP檔案中的程式碼內容。
AutoLISP自動運行
經過前面的說明,您可能已經學會在AutoCAD LT輸入一段AutoLISP程式碼,或是載入和執行AutoLISP檔案,這些技巧都很棒,但還有更多!
您可以檢查圖層,以確保圖層符合您設定的標準,如果不符合就自動進行修改,對所有型式也能做同樣的處理。您可以檢查檔案的名稱、資料夾或路徑,以確保檔案符合分類或規則限制。這些都可以輕鬆地使用在網路上找到的程式碼完成,通常只要在您慣用的搜索引擎中輸入關鍵字搜尋即可。
當您開啟一個圖檔時,有一個特殊的檔案會自動載入,在完整版的AutoCAD是一個名為ACADDOC.lsp的檔案,而AutoCAD LT則是ACADLTDOC.lsp檔。這些檔案一開始都不存在,所以您需要建立它(記得使用記事本),並確保這個檔案在您的AutoCAD搜尋支援路徑中的資料夾。它將會像“載入/卸載應用程式”對話方塊中的“啟動套件”一樣運作,不僅是載入程式碼讓您可以使用,還可以運行自訂指令。
通常,這也是控制AutoCAD LT環境變數的技巧,您可能希望確保某些系統變數或環境變數保持您喜好的設定值。以下是公司可能添加到ACADLTDOC.lsp檔案中的AutoLISP程式碼範例:
(setvar “FILEDIA” 1)
(setvar “CMDDIA” 1)
(setvar “ATTDIA” 1)
(setenv “ShowFullPathInTitle” “1”)
以上只是AutoLISP的陳述式,因此開啟圖檔時會自動執行套用,不需要輸入指令來運行程式碼,這是標準化AutoCAD LT設定的絕佳方法之一。
您也可以在這裡放一些縮寫或是輔助指令,您需要記得自訂的指令名稱(在 C: 之後的部分),同樣,透過輸入自訂指令會運行程式碼。以下是一個類似指令別名的縮寫名稱範例,只需輸入 MP 就能運行AutoCAD LT的指令 MATCHPROP。
(defun c:mp () (command “_matchprop”) (princ))
它可以是某種輔助指令,以下程式碼讓您將物件以您選取的點為中心旋轉180度。
(defun C:flip () (command “_rotate” (car (entsel)) “” (getpoint) “180”) (princ))
探索 Visual Lisp
到目前為止,我們談的都是使用原始的 AutoLISP(.lsp檔),但您可能會看到其它也被廣泛使用的副檔名。查看程式碼時,請注意程式碼前面是否有以下語句:(vl-load-com)。這是一個判斷程式碼可能使用ActiveX 相關函數的技巧,此外,還可以查找以“vla-”或“vlax-”開頭的指令。
發現這些不是壞事,因為您的新版AutoCAD LT 2024也支援使用,但問題是根據程式碼的動作,有可能無法正常工作。例如,AutoLISP 中的 ActiveX 可以建立和修改 3D 對象,但是AutoCAD LT 不支援 3D,因此這個程式碼就沒有作用,對於其它AutoCAD LT不支援的參數約束、模型文件、外掛程序...等都是如此。
但是在 AutoLISP 程式碼中,有一種 ActiveX 程序可能會有幫助,而且應該可以正常運作,如果在您繪圖的過程中有一個隱藏的程式碼正在等待特定事件的發生,這不是很酷嗎?
想像一下這個場景。您的團隊不允許同仁分解標註物件,但還是有同仁會偷偷進行這個操作。假如有一個隱藏的程式碼,只有在對標註物件使用 EXPLODE 分解命令時才會執行,程式碼會強制接管並且阻止同仁對標註物件執行分解動作。
這稱為事件驅動編程,可以透過反應器實現,這有點難度,但您在網路上可能找到可以運行的程式檔案,反應器和當它被啟用時運行的函數(“回調函數”)也可以放在 ACADLTDOC.lsp 中。
尋找AutoLISP和Visual Lisp程式碼
初學者可能不會一開始就撰寫程式碼,而是在網路上尋找,很多AutoLISP程式設計師也經常會先找一些相關的程式碼,閱讀並修改一些參數或程式碼,然後測試它是否仍然有效。
以下是一小段AutoLISP程式碼,這段程式碼是將所有文字型式更改為使用ROMANS。
(defun C:MakeRomans (/ rewind next name)
(setq rewind T)
(while (setq next (tblnext “STYLE” rewind))
(setq name (cdr (assoc 2 next)))
(if (not (wcmatch name “*|*”))
(command “-style” name “romans” “” “” “” “” “” “”))
(setq rewind nil))
(princ))
初學者對程式碼可能會排斥或是感覺陌生,但請仔細看看,您可能會認識其中的一些東西,例如STYLE指令,當然,ROMANS是很熟悉的文字型式,其實,整段程式碼看起來會很像您在記事本編寫腳本的樣子,也許您已經準備好嘗試修改某些內容會發生什麼事了。
例如,第一個嘗試是改變不同的字型,您可以把ROMANS改成其他文字型式,例如ARIAL。然後存檔,再載入到AutoCAD LT執行……嘿,居然成功了!
網路社群是初學者查找程式碼最好的管道之一,我幾乎可以保證,如果您有一個好主意,想要使用 AutoLISP處理某項工作,您很可能不是第一個想要這樣做的人。許多AutoLISP 程式設計師喜歡炫耀,這也意味著他們喜歡透過網路社群互相幫助,這對初學者來說是一個好機會。
首先,您需要熟練使用程式碼的特定關鍵字和片語,以準確找到您需要的程式碼,也確保包括 AutoLISP 的整個程式碼(不只是 AutoLisp),而且我仍然會以查找 AutoCAD 的程式碼為主,而不是查找AutoCAD LT,因為最新版的AutoCAD LT 2024才剛發布,至少現在網路上還沒有AutoCAD LT 的 AutoLISP 程式碼。
另外,搜尋關鍵字可以使用程式碼要執行的動作,並且盡量使用AutoCAD語言。例如,複製使用Copy而不是Duplicate,然後省略冠詞、形容詞和介詞,嘗試建立類似以下的關鍵字搜尋:AutoCAD AutoLISP export layer table。
未來持續學習,您會發現什麼關鍵字對您有效,什麼不行,你也會開始看到搜尋結果中的規律性,某些網站會經常出現,你也會感覺到哪些網站的程式碼對您有幫助,反之亦然。
您甚至可以嘗試一些最新的AI技術,您肯定已經聽說過今年出現的各種AI聊天網站。只要詢問就能幫您編寫一些程式碼!但要小心,因為結果可能有一些"初學者"的錯誤,未來科技發展和進化的速度非常快,也許當您讀到這篇文章時,這些AI技術可能已經被完善了。
更多學習資源
希望以上內容能激起您對AutoCAD LT撰寫程式碼的好奇心,還有很多資源可以開始學習。
了解程式碼定義最好的地方是Autodesk自己的AutoLISP開發者指南,如果您準備好開始學習,有一個入門教程可以幫助您開始,另外,AutoLISP論壇。Autodesk University也提供線上課程。
隨著AutoCAD LT 2024的發佈,你也可以查看AutoCAD LT 2024 Help的 AutoLISP的新功能或變更和AutoLISP參考指南中功能參考的改進。
嘗試在AutoCAD LT中使用AutoLISP
如果您想要嘗試在AutoCAD LT使用AutoLISP,探索在AutoCAD LT運行自動化和節省時間的程式碼世界,但是還不是AutoCAD LT的訂閱用戶,您可以在這裡下載免費的30天試用版。多做一些測試,多學一些東西,不要害怕失敗。