著作權歸作者所有,任何形式的轉載都請聯(lián)系作者。
在AutoCAD中,DIESEL是Direct Interpretively Evaluated String Expression Language(直接解釋求值字符串表達式語言)的縮寫,它是一種宏語言,今天隆重推薦。本人多年以前在研究AutoCAD的菜單文件時,看到菜單中有“$”開頭的字符串,不明所以,也未進一步研究,直到前段時間研究Diesel語言才終于明白就是它。對于大多數(shù)一般AutoCAD使用者而言,Diesel語言相當陌生。實際上,對于能夠在字段、菜單和按鈕等位置靈活運用Diesel表達式的設計人員而言,將帶來很大的便利。
在Diesel表達式中,'$()'告訴AutoCAD,括號中包含的以下字符串需要由Diesel解釋器進行評估。"$"是CAD中Diesel語言形成的宏的標記,而后面的"()"則是表達式語言的標記,跟AutoLisp一樣,操作符前置。Diesel表達式也可以嵌套。它可以在菜單、按鈕中應用,也可以在“字段”中應用,還可以用來修改狀態(tài)行。
Diesel 表達式的函數(shù)、錯誤消息以及應用具體介紹如下,也可以參見Autodesk Knowledge Network官網(wǎng)(雖然為中文,但注意是機器翻譯):
所有的函數(shù)最多只能包含 10 個參數(shù),包括函數(shù)名本身。函數(shù)基本形式為:$(函數(shù)名, 參數(shù)1, 參數(shù)2, …, 參數(shù)9)。參數(shù)若含“[ ]”,說明參數(shù)可選。
1、四則運算
四則運算包括+(加)、-(減)、*(乘)、/(除)4種。
$(+, val1 [, val2, …, val9]) ,返回數(shù)字 val1 、 val2 、…、 val9 的和。
$(-, val1 [, val2, …, val9]) ,返回數(shù)字 val1 減去? val2 、…、 val9 的結果。
$(*, val1 [, val2, …, val9]) ,返回數(shù)字 val1 、 val2 、…、 val9 的積。
$(/, val1 [, val2, …, val9]) ,返回數(shù)字 val1 除以 val2 、…、 val9 的結果。
2、比較運算
比較運算符包括 =(等于)、<(小于)、>(大于)、!=(不等于)、<=(小于或等于)、>=(大于或等于)6種。所有比較運算函數(shù)形式均相同,參數(shù)個數(shù)均為2個,結果為真,返回1,否則返回0。如 $(!=, val1, val2) ,如果數(shù)字 val1 和 val2 不相等,則字符串返回 1;否則,返回 0。
3、邏輯運算
邏輯運算符包括and(與)、or(或)、xor(異或)3種。所有邏輯運算函數(shù)形式均相同,參數(shù)均為整數(shù),最多可以有9個參數(shù)。如 $(xor, val1 [, val2,…, val9]),返回整數(shù) val1 到 val9 的按位邏輯異或。
4、函數(shù)
函數(shù)包括 angtos、edtime、eq、eval、fix、getenv、getvar、if、index、nth、rtos、strlen、substr、upper 等14個。具體說明如下:
$(angtos,value[,mode,precision]) 按指定的格式和精度返回角度值??蓱靡韵?mode值:0(表示度)、1(表示度/分/秒)、2(表示百分度)、3(表示弧度)、4(表示勘測單位)。
$(edtime, time, picture) 返回基,于指定圖片的格式化的日期和時間。
$(eq, val1, val2) 如果字符串 val1 和 val2 相同,則字符串返回 1;否則,返回 0。
$(eval,str) 將字符串 str 傳給 DIESEL 計算器,并返回計算結果。
$(fix, value) 通過舍棄小數(shù)部分,將實數(shù)數(shù)字值 截斷為整數(shù)。
$(getenv, varname) 返回環(huán)境變量 varname 的值。
$(getvar, varname) 返回具有給定 varname 的系統(tǒng)變量的值。
$(if,expr, dotrue [, dofalse]) 如果 expr 為非零,則進行計算并返回 dotrue 。否則,進行計算并返回 dofalse 。
$(index, which, string) 返回以逗號分隔的字符串中的指定成員。which 參數(shù)第一項編號為 0;
$(nth, which, arg0 [, arg1,…, arg7])? 計算并返回由 which 選定的參數(shù)。如果 which 為 0,則 nth 返回 arg0 ,依此類推。
$(rtos, value [, mode, precision])? 按指定的格式和精度返回實數(shù)值。
$(strlen,string) 返回 string 的字符長度。
$(substr, string, start [, length])? 返回 string 的子串,該子串從字符 start 開始,長度為 length 。字符串中的字符從 1 開始編號。如果省略 length ,則返回所有剩余字符串。
$(upper, string) 返回 string 按當前地區(qū)的規(guī)則轉換為大寫的結果。
通常,如果 Diesel 表達式中存在錯誤,AutoCAD會根據(jù)錯誤的性質,DIESEL 在輸出流中嵌入一個錯誤指示。四種錯誤提示如下:
1、$? :語法錯誤(通常是由于括號不匹配或字符串太長);
2、 $(func,??) :func 的參數(shù)錯誤;
3、$(func)?? :未知函數(shù)func;
4、$(++) :輸出字符串太長 — 計算被截斷;
三、應用
1、在菜單或按鈕中使用。要在菜單宏中使用Diesel表達式,需在Diesel表達式前加上“$M=”。該字串后面所有內容都發(fā)送到DIESEL解釋器,結果用作宏。如AutoCAD的 UCS 圖標按鈕,是一個開關按鈕,通過Diesel表達式實現(xiàn)UCSICON圖標的打開與關閉切換,其宏定義為$M=$(if,$(and,$(getvar,ucsicon),1),^C^C_ucsicon _off,^C^C_ucsicon _on)。具體解讀如下:

⑴ $(getvar,ucsicon) 函數(shù)為獲得系統(tǒng)變量UCSICON的值,當UCSICON圖標打開,返回值為1;當UCSICON圖標關閉,返回值為0;
?、?$(and, $(getvar,ucsicon),1) 將$(getvar,ucsicon)返回值與1求邏輯與,當返回值為1,該邏輯與結果為真;當返回值為0,該邏輯與結果為假;
?、?$(if,$(and,$(getvar,ucsicon),1),^C^C_ucsicon _off,^C^C_ucsicon _on) 該條件判斷函數(shù),當邏輯與為真時,執(zhí)行 “^C^C_ucsicon _off” 將已打開的UCSICON圖標關閉,當邏輯與返回假時,執(zhí)行 “^C^C_ucsicon _on” 將已關閉的UCSICON圖標打開;
?、?命令中 ^C 是特殊字符,功能是取消活動的命令或命令選項,相當于按一次 Esc 鍵。兩個^C 是確保終止上一個命令。
2、在字段中使用。字段中如何插入Diesel表達式詳見“DWG文件名與文件內的圖名、圖號關聯(lián)修改”。
有編程經(jīng)驗的設計人員,對用好Diesel表達式有優(yōu)勢。當然,Diesel語法簡單,對于一般設計人員而言,也可以深入研究Diesel函數(shù)及其各種用途,讓工作省時省力。歡迎一起探討!