autocad中的diesel语言详解
AutoCAD附帶了大量API(應用程序編程接口),可以使用LISP,VBA或C ++等語言構建自定義環境。在AutoCAD的第12版中,我們突然發現產品中隱藏了另一種小編程語言。它據說自版本1.4以來一直在發布列表中,遵循Autodesk的傳統:“好吧,我們可以讓它變得簡單,但為什么不讓它可定制?”?
AutoCAD程序員使用DIESEL向菜單標簽添加少量復選標記,并在命令前面取消“取消”。有些人還使用DIESEL將圖紙名稱添加到狀態欄。在Windows發布之后,即使使用DIESEL也不見了。所以它可能在歷史上逐漸消失......
但隨后Autodesk發布了AutoCAD LT,并且在對AutoLISP LT產生了一些初步混淆之后 - 我們了解到DIESEL是?LT中唯一的編程語言。突然間花些時間和DIESEL玩是很有意義的。本文將教您如何使用DIESEL,何時使用它以及為什么。
專業人士,請繼續閱讀
專業的LISP和ADS程序員可能認為DIESEL不值得考慮。在你翻頁之前,首先回答這個小測驗:“向我展示從逗號分隔的關鍵字列表中提取第三項的最短例程。”?這是我的解決方案,這只不過是對DIESEL的調用:
(defun 3rd (string)(menucmd (strcat "m=$(index,2,\"" string "\")")) )你知道,即使你沒有任何理由來處理LT,DIESEL也很有用。現在,如果您之前知道這一點,請不要再進一步閱讀......否則:這里有一些DIESEL供LISPers使用。
專業人士,不要忘記RText
你不做LISP,你不做菜單宏。好吧,也許DIESEL真的不適合你。但是,您是否希望AutoCAD對象顯示為文本,但會根據當前環境自動更改其內容?例如,您是否希望文本字符串自動顯示當前圖形文件的名稱和路徑,或上次編輯的日期?
沒問題,如果您安裝了AutoCAD Release 14或更高版本的Bonus / Express工具,請查看RText命令。這會創建一個RText對象,就像我剛剛報告的那樣。你如何定義變體文本字符串?您輸入DIESEL表達式。
專業人士,并自己使用它
DIESEL由John Walker為Autodesk,Inc。編寫。約翰和Autodesk將該程序及其源代碼放在公共領域。您可以從John Walker的網站www.fourmilab.ch/diesel下載完整的源代碼。這允許您將DIESEL解釋器嵌入到您自己的程序中,無論是否與AutoCAD相關。如果您遇到DIESEL的其他實現,請通過dietmar@crlf.de告知我們。
到目前為止,已經“知道一切”的專業人士有三個原因可供閱讀。現在讓我們來看看DIESEL究竟是什么以及你能用它做些什么。
字符串處理語言
DIESEL背后的基本理念很簡單:“只有字符串”。
DIESEL解釋器接受一個字符串,處理它,并返回一個字符串。最初,DIESEL解釋器返回其輸入流中的每個字符。但這很無聊。因此,DIESEL解釋器在輸入流中接受特殊字符序列(“函數調用”),并用函數結果替換它們。
交互式的DIESEL
沒有單獨的DIESEL的交互式版本,即您不能鍵入字符串,將其傳遞給DIESEL解釋器并打印結果。但是建立一個DIESEL語句卻相當容易。
如果使用完整版本的AutoCAD,請在命令行中直接鍵入以下行:
(defun c:DIESEL (/ s)(while (/= "" (setq s (getstring "\nDIESEL: " T)))(princ (menucmd (strcat "m=" s))))(princ) )這將實現一個名為DIESEL的新命令(還有什么)。它會提示您輸入一個字符串,將其傳遞給DIESEL解釋器,并報告結果。
如果您使用AutoCAD LT并且更喜歡菜單,請將以下內容作為一行添加到菜單文件中,例如,按照_time命令:
[DIESEL]*^C^C_SETENV DIESEL;\_SETENV DIESEL;$M=$(EVAL,"$(GETENV,DIESEL)");下次啟動LT時,菜單將重新編譯,您將在適當的下拉菜單中找到DIESEL命令。點擊“DIESEL”。該命令將提示您輸入一個字符串,將其傳遞給DIESEL解釋器,并報告結果。
如果使用AutoCAD LT 97并更喜歡工具欄,請創建DIESEL工具欄按鈕。要執行此操作,請右鍵單擊任何工具,選擇“新建”并輸入DIESEL作為工具欄名稱。DIESEL工具欄會打開,但其中沒有工具。選擇“自定義”,然后將“自定義”類別中的空白按鈕拖到新工具欄中。在名稱和幫助下輸入“DIESEL Test”,宏輸入:
*^C^C_SETENV DIESEL;\_SETENV DIESEL;$M=$(EVAL,"$(GETENV,DIESEL)")關閉所有工具欄對話框。LT將重新編譯菜單,現在您有一個DIESEL測試命令按鈕。它將再次提示您輸入一個字符串,將其傳遞給DIESEL解釋器,并報告結果。
在較新版本的AutoCAD LT中,您使用相同的宏,只有創建按鈕的方式有點不同。使用工具>自定義>工具欄。使用“工具欄”選項卡創建DIESEL工具欄,使用“命令”選項卡將用戶定義的按鈕拖動到此新工具欄,然后使用“屬性”選項卡輸入名稱,幫助字符串和宏。
DIESEL基礎知識
讓我們開始嘗試我們的定制DIESEL命令。
DIESEL: Hello,world! Hello,world!DIESEL剛剛通過了任何編程語言的基本測試。它打印出“Hello,world!”字樣。但是,你說這不是證據嗎?也許它沒有解釋輸入線?好的,測試#2:
DIESEL: "Hello,world!" Hello,world!你看?它真的做到了。它會抑制測試字符串周圍的引號。由于DIESEL中的所有內容都是字符串,因此有時您需要明確地說“這是一個字符串,而這不是!”?與其他所有編程語言一樣,一對引號表示“這是一個字符串!”。DIESEL解釋器將此接受為輸入字符串,而返回的結果是沒有引號的字符串,如您所料。
那么,如何將引號放入字符串中?簡單地說,使用兩個引號來表示一個, 加上一對周圍的引號告訴DIESEL“這只是一個字符串!”:
DIESEL函數
正如前面所說的,字符串傳遞給DIESEL解釋還不是常有趣。因此,Autodesk為DIESEL添加了許多有用的功能。我們可以計算“Hello,world!”的長度。串:
DIESEL: $(strlen,"Hello,world!") 12DIESEL中的函數調用以美元符號為前綴,并用括號括起來。逗號充當函數名稱及其參數之間的分隔符。參數一直運行到下一個逗號或右括號。您不必在參數中添加引號,除非它們包含逗號,就像在此示例中一樣。如果你不在這里添加引號,“Hello”和“world”之間的逗號將結束strlen參數,因此返回5.?
在DIESEL函數中使用引號要比看起來困難得多。因此,我們改為更簡單的測試字符串。
只返回任何不屬于函數調用的字符 - 而不是引號。因此,您可以輕松地以您需要的任何方式連接單詞,命令名稱和選項。
DIESEL: SNAP;$(strlen,aDIESELteststring).0 SNAP;17.0DIESEL計算
永遠記住DIESEL只接受字符串并返回字符串。但是,您可以使用字符串計算,只要它們看起來像數字:
DIESEL: $(+,1,1) 2DIESEL中的數學函數是+, - ,*和/。DIESEL函數fix,rtos,angtos和edtime?取一個字符串,將其解釋為實數,并將其格式化為整數,長度,角度或日期/時間。
DIESEL函數調用
與任何其他編程語言一樣,您可以“嵌套”函數調用,即使用一個函數調用來計算外部函數調用的參數。
DIESEL: $(+,$(strlen,aDIESELteststring),$(strlen,anotherstring)) 30一旦開始編寫嵌套函數調用的DIESEL表達式,在?評估哪個函數以及如何評估函數時就會感興趣。AutoCAD和AutoCAD LT都可以報告評估順序和結果。只需將系統變量MACROTRACE設置為1.這是最后一次評估的打印輸出:
DIESEL: $(+,$(strlen,aDIESELteststring),$(strlen,anotherstring)) Eval: $(+, $(strlen,aDIESELteststring), $(strlen,anotherstring)) Eval: $(strlen,aDIESELteststring) ===> 17 Eval: $(strlen,anotherstring) ===> 13 ===> 30如果您創建DIESEL程序,請始終打開宏跟蹤。這很容易指出最終的錯誤。
DIESEL變量
如果DIESEL不允許您使用某種變量來存儲和檢索數據,它將不是一種“真正的”編程語言。DIESEL變量只能包含字符串 - 正如您所期望的那樣。
DIESEL不知道任何“內部”變量,但它使用AutoCAD的變量。要檢索AutoCAD變量的值,請使用getvar函數:
點類型變量成為逗號分隔的字符串,整數類型和實型變量成為字符串。索引?函數是很方便的用于求出x或y的點的坐標,像在本例中:
DIESEL: $(rtos,$(index,1,$(getvar,viewctr)),2,3) Eval: $(RTOS, $(index,1,$(getvar,viewctr)), 2, 3) Eval: $(INDEX, 1, $(getvar,viewctr)) Eval: $(GETVAR, viewctr) ===> 261.70086705,176.04582323,0 ===> 176.04582323 ===> 176.046 176.046要保存變量值,只需調用setvar?命令或AutoLISP函數即可。AutoCAD Release 12引入了USERS *字符串類型變量,用于與DIESEL連接。AutoCAD LT錯過了這些變量,但您可以使用setenv?命令和getenv?DIESEL函數作為替換。有關示例,請參閱我們的初始LT宏。
在DIESEL中使用變量時一個典型的問題是當?該變量被設置或讀取。對此至關重要的是宏求值序列。
強制DIESEL求值
LT宏還顯示了如何使用eval?DIESEL函數。輸入的字符串將保存到DIESEL環境變量中,該變量是ACLT.INI文件的一部分。Windows注冊表。接下來,我們使用getenv檢索字符串。然而,這只給我們輸入的字符串。我們需要明確強制DIESEL來評估getenv返回的字符串。
條件表達式
要創建條件宏,DIESEL包含if?和nth函數,其中nth類似于其他編程語言的case語句。條件也使用字符串:字符串“0”等于false,字符串“1”或除“0”以外的任何值等于true。
要編寫表達式,您可以使用=,<,>,!=,<=,> =和eq函數。要組合條件,請使用and,?or和xor函數。有沒有不?工作,但你可以很容易地使用,如果函數完成這個任務:
循環
與其他編程語言不同,DIESEL沒有重復某些操作的命令。
如果你在LISP工作,這當然沒問題,因為LISP本身有足夠的控制結構來創建循環。
如果您使用的是AutoCAD LT,則可以使用菜單宏的自動重復來實現循環。如果您的菜單宏以星號(*)開頭,AutoCAD將永遠重復它(或直到您或宏強制中斷)。使用變量,您可以構建運行預定義次數的循環,甚至可以循環遍歷字符串中的字符。在Robert Freeman的Text on Arc宏中可以找到這種技術的一個非常復雜和精細的例子。
DIESEL應用程序
對于DIESEL的幾種用途,請參閱:
- DIESEL為LISPers
- 一些有用的DIESEL宏
- DIESEL編程實例
我相信你會找到其他人。主要的DIESEL應用是:
- AutoLISP中的字符串格式。編寫DIESEL'程序',前綴為“m =”,并將其作為參數傳遞給(menucmd)函數。AutoLISP將返回DIESEL解釋器計算的字符串。
- 狀態行格式。每次應答命令提示時,AutoCAD都會將MODEMACRO系統變量傳遞給DIESEL解釋器。DIESEL結果顯示在狀態行中。這對于在AutoCAD / DOS中顯示DWGNAME變量,在AutoCAD LT中顯示提示或在版本13中顯示正在運行的對象捕捉非常方便。請注意,永久MODEMACRO字符串會覆蓋AutoCAD / Win Release 12中工具欄的重要部分。 LT 1/2,所以不建議這樣做。
- 說話菜單標簽。您可以根據外部設置向菜單標簽添加變量,添加復選標記或灰色菜單標簽。請注意,如果要對其進行解釋,則菜單標簽必須以DIESEL函數開頭。另請注意,某些環境不允許在菜單標簽中使用DIESEL表達式,例如Macintosh或DOS版本的屏幕菜單。其他人在初始加載后不更新菜單標簽,例如AutoCAD / Win Release 12。
- 條件菜單宏。這是最常用的DIESEL應用程序。甚至標準菜單都可以使用它。側邊欄有幾個例子。要在菜單宏中使用DIESEL,請在DIESEL表達式前加上“$ M =”。后面的所有內容都發送到DIESEL解釋器,結果用作宏。
- 使用AutoCAD Release 14及更高版本中的RText命令自行修改注釋對象。
參考
DIESEL的主要來源是John Walker的網站www.fourmilab.ch/diesel。在這里,您不僅可以找到有關該語言的詳細信息,還可以下載完整的C語言源代碼,將DIESEL嵌入到您自己的程序中。
為方便起見,我添加了所有DIESEL命令的參考。
有關DIESEL及其用途的更多信息,請閱讀:
- “狀態行配置和DIESEL字符串表達式語言” - 在:AutoCAD自定義和AutoCAD LT手冊中,Autodesk
- Beat Fehr:“Turbo DIESEL的力量” - 載于:CAMP ADGE會議錄,1994年5月,ADGE
- Rusty Gesner和Joseph Smith:“在DIESEL上運行” - 在:最大化AutoCAD Release 12,New Riders
- Jeremy Tammik:“DIESEL” - 位于:AutoCAD開發系統“ADS”,Rossipaul Medien
Dietmar Rudolph在德國埃森擔任?CR / LF公司負責人。他是CAD顧問,應用程序開發人員和備受尊敬的AutoCAD專家。在業余時間,他撰寫了幾本CAD書籍,數百篇雜志文章和各種CAD手冊。Dietmar已將各種Autodesk產品和其他程序本地化,以用于德語市場。
總結
以上是生活随笔為你收集整理的autocad中的diesel语言详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自然语言处理系列之:中文分词技术
- 下一篇: 知识图谱分类