AutoCAD作為一款強大的工程繪圖軟件,已經(jīng)成為工程人員工作中不可缺少的重要工具。AutoCAD的主要命令方式是命令行,幾乎所有的操作都可以通過相應的鍵盤命令來完成。除此之外,Autodesk公司還提供了豐富的快捷菜單和工具欄以提高用戶的工作效率。但由于用戶的專業(yè)不同,因此系統(tǒng)缺省的菜單往往不能完全滿足不同專業(yè)的需要。如果能夠根據(jù)自己的需要和習慣來合理的安排菜單的內(nèi)容和布局,將能夠使工作效率大幅度提高。
一、刪除和插入菜單
要想對菜單進行定制,首先應該了解刪除和插入菜單的方法。AutoCAD本身就提供了一些定制菜單的方法,下面我們將以AutoCAD 2000中文版為藍本,具體介紹刪除和插入菜單的操作方法。
也許您并不經(jīng)常使用AutoCAD的“幫助”功能,下面的操作將刪除AutoCAD標準菜單中的“幫助”菜單。刪除菜單最簡單的方法就是選擇“工具”菜單下的“自定義菜單”命令,之后將出現(xiàn)“菜單自定義”對話框,該對話框分為“菜單組”和“菜單欄”兩個選項卡。選擇“菜單欄”選項卡,然后在“菜單欄”列表中選中“幫助”項,單擊“刪除”按鈕來刪除選中的“幫助”菜單,如圖1所示。單擊“關閉”按鈕關閉對話框。此時幫助菜單已經(jīng)被刪除了。

1.jpg

與刪除菜單相比,插入菜單的操作顯得更為常用,畢竟多數(shù)時候我們是想對軟件的功能進行擴充。AutoCAD 2000可以通過外部數(shù)據(jù)庫來管理您的工作,但是AutoCAD的標準菜單欄并未提供有關數(shù)據(jù)庫的功能。下面我們就將管理數(shù)據(jù)庫的Data View(查看數(shù)據(jù))菜單插入菜單欄中。
按照前面的方法打開“菜單自定義”對話框,單擊選擇“菜單組”選項卡,此時“菜單組”列表中有一個ACAD菜單組,這個菜單組就是AutoCAD的標準菜單組,包含了標準AutoCAD菜單欄中的全部11個菜單,而“查看數(shù)據(jù)”菜單并不包含在標準的ACAD菜單組中,所以必須裝載包含此菜單的dbConnect菜單組。單擊“瀏覽”按鈕,打開“選擇菜單文件”對話框,選擇包含dbConnect菜單組文件dbcon.mun,單擊“打開”按鈕打開該文件,在彈出的提示對話框中單擊“是”按鈕(如圖2所示),

2.jpg

生成MNS文件。這樣“菜單組”列表中就增加了dbConnect菜單組。選擇“菜單欄”選項卡,在“菜單組”列表框中選擇dbConnect菜單組,在“菜單”列表框中選擇“查看數(shù)據(jù)”菜單,選擇插入位置后單擊“插入”按鈕(如圖3所示),單擊“關閉”按鈕關閉對話框。這樣,“查看數(shù)據(jù)”菜單就被插入到菜單欄中。
二、了解菜單文件內(nèi)幕
通過第一節(jié)的介紹我們會發(fā)現(xiàn),AutoCAD提供的菜單定制功能十分簡單,不能滿足各種專業(yè)的需要,那么AutoCAD的強大定制功能是如何實現(xiàn)的呢?原來AutoCAD的菜單文件是使用ASCII碼格式存儲的文件,使用任何文本編輯器都可以編輯。只要懂得菜單文件的格式和語法,就可以定制執(zhí)行各種命令的菜單。這種定制方法盡管比較繁瑣難學,但卻為AutoCAD的菜單開發(fā)提供了更廣闊的空間,下面我們就能深入研究菜單文件內(nèi)幕。
菜單文件用于定義和顯示AutoCAD中的各種菜單。菜單文件實際上是功能與格式各不相同的一組文件:MNU文件是模板菜單文件,是ASCII碼格式;MNS文件是菜單源文件,也是ASCII碼格式;MNR文件是菜單資源文件,二進制格式,包含菜單所用的資源;MNC文件是經(jīng)過編譯的菜單文件,AutoCAD可以識別的二進制格式;MNL文件是菜單LISP文件,包含菜單文件所用AutoLISP表達式;MND文件則是包含宏定義的特定菜單源文件,不經(jīng)常使用。在這些文件當中,我們真正關心的是可以編輯的ASCII碼文件,特別是MNU文件。如果了解這些菜單文件的生成和調(diào)用過程,就可以理解我們只關心MNU文件的原因了,因為其它菜單文件都是MNU文件生成的。
菜單模板文件是一個供用戶編輯的ASCII文件,在這種文件里包含有較多的注釋和適當?shù)姆指舴阌谑褂谜唛喿x和編輯。AutoCAD載入MNU文件后,它會自動生成一個MNS文件,這個文件也是ASCII碼格式,內(nèi)容與同名MNU文件基本相同,只是去除了多余的注釋和分隔部分。AutoCAD將MNS文件作為進一步編譯的源文件,MNS文件經(jīng)過編譯之后會生成一個程序可以直接調(diào)用的二進制MNC文件以及與之對應的資源文件MNR。這兩種文件都是二進制格式,不可以直接編輯,這5種文件之間的關系如圖4所示。
如果用戶編輯的菜單命令中包含了AutoLISP表達式,則AutoCAD會將這些表達式存為MNL文件。AutoCAD在調(diào)用菜單文件(MNU、MNS、MNC)時,將搜索同名的MNL文件,若找到,則此MNL文件將被同時調(diào)入內(nèi)存。在對其它菜單文件進行更名操作時,一定要同時將相應的MNL文件更名。不然,會因為菜單命令內(nèi)AutoLISP表達式無法求值而引起錯誤。菜單文件儲存在AutoCAD安裝路徑的Support子目錄下,AutoCAD的標準菜單的文件名是ACAD.MNU。為了學習菜單的定制和開發(fā)技術(shù),深入研究一下ACAD.MNU文件是很要必要的。在Support子目錄中找到ACAD.MNU文件,用文本編輯器打開它。
文件的開始處是以“//”開頭的幾行注釋,主要是一些版本和版權(quán)信息的描述。注釋行之后的第一行描述了該文件定義的菜單組名,該行的語法是:“***MENUGROUP=菜單組名”(如圖5所示)。

3.jpg

這里的ACAD.MNU文件定義的菜單組名是ACAD。繼續(xù)分析這個文件,就會發(fā)現(xiàn)它是由許多區(qū)域組成的,這些區(qū)域的共同點就是第一行都是以“***”開頭,而且在區(qū)域的開始處都有以“//”開頭的幾行注釋來說明此節(jié)的功能。區(qū)域名聲明的語法為:“***SECTION NACE”,表示以下各行為一個區(qū)域,區(qū)域名為SECTION NAME。三個星號開頭的行表示這一區(qū)域的區(qū)域名,區(qū)域名不可以隨意定義,AutoCAD只支持下表列出的區(qū)域名。
=============================================================
   部分區(qū)域名 菜單區(qū)域的功能 備注
=============================================================
***BUTTONSn 第n個定點設備按鈕菜單區(qū)域 n=1~4
***AUXn 第n個系統(tǒng)定點設備菜單區(qū)域 n=1~4
***POPn 第n個菜單區(qū)域 n=1~499
****TOOLBARS 工具欄定義區(qū)域
***IMAGE 圖像控件菜單區(qū)域
***SCREEN 屏幕菜單區(qū)域
***TABLETn 第n個數(shù)字化儀菜單區(qū)域 n=1~4
***HELPSTRINGS 幫助文本區(qū)域
***ACCELERATORS 快捷鍵定義區(qū)域
==============================================================
“***BUTTONSn”和“***AUXn”定義了定點設備(如鼠標或數(shù)字化儀)的按鈕在按下時AutoCAD發(fā)生的行為。如果修改了這些區(qū)域,AutoCAD的行為將產(chǎn)生很大混亂,甚至可能會導致應用程序的癱瘓。因此,在沒有必要的情況下,不要對這兩類菜單進行任何修改。
區(qū)域名為“POPn”的菜單項有兩類,分別為下拉菜單和快捷菜單。下拉菜單和快捷菜單才是我們通常意義上的Windows標準菜單,即觸發(fā)時彈出的菜單,這種形式的菜單在Windows中稱為級聯(lián)菜單(也稱為步進菜單或?qū)哟尾藛危,下拉菜單總是從菜單欄中下拉,快捷菜單則是顯示在圖形屏幕上十字光標所在或靠近十字光標的位置,以及圖形屏幕、文本窗口、命令行或工具欄區(qū)域上光標的位置?旖莶藛瓮ㄟ^“$P0=*”菜單命令來訪問,該命令由其它菜單項產(chǎn)生,或由AutoLISP或ObjectARX程序發(fā)出。例如,在繪圖區(qū)單擊鼠標右鍵彈出的菜單就是快捷菜單。當快捷菜單被激活時,菜單欄不可用。這兩種菜單區(qū)域的語法是相同的,對這兩類菜單區(qū)域進行定制是本文所要講述的主要內(nèi)容。
除了Windows標準菜單外,AutoCAD還提供了其它形式的快捷方式來執(zhí)行命令,例如工具欄、圖像菜單、屏幕菜單、快捷鍵等。菜單文件的其它區(qū)域定義了這些快捷方式。“***TOOLBARS”部分指定工具欄的缺省布局和內(nèi)容,它包含菜單所定義工具欄的子菜單,如圖6所示。
圖像控件菜單主要用來當用戶選擇一個圖形符號時提供圖像,圖像控件菜單通過在菜單文件中提供“***IMAGE”部分來定義。
“***SCREEN”部分標簽表示AutoCAD屏幕菜單的開始。屏幕菜單部分控制屏幕菜單區(qū)域。缺省情況下,屏幕菜單是禁用的。通過選擇“工具/選項/顯示”上的“顯示屏幕菜單”,可啟用屏幕菜單。
菜單文件中標簽為“***TABLET1”到“***TABLET4”的四個部分定義了一些菜單宏,這些菜單宏與指定區(qū)域的數(shù)字化儀選擇相關。AutoCAD最多可將數(shù)字化儀的四個區(qū)域配置為命令輸入的菜單區(qū)域。
狀態(tài)行幫助信息是幫助支持的一個重要方面,當菜單項被選擇時,在狀態(tài)行中顯示這些簡單的描述性信息。“***HELPSTRINGS”部分中的幫助字符串菜單區(qū)域支持這種格式的幫助,如圖7所示。

4.jpg

AutoCAD支持用戶定義的快捷鍵。“***ACCELERATORS”菜單區(qū)域定義了來自用戶的快捷鍵。
三、建立自己的菜單
當AutoCAD提供的標準菜單不能滿足用戶需求時,我們可以通過修改菜單文件來開發(fā)自己的菜單。我們可以用修改ACAD.MNU文件的方法建立自己的菜單項。下面我們來制作一個最簡單的菜單。
第一步:打開ACAD.MNU文件,在文件中輸入如下字樣:
 ***POP12
   [繪制]
   [直線] ^c^c^_line
   [圓] ^c^c_circle
   [文字] ^c^c_text
第二步:存盤并退出文本編輯器,然后進行AutoCAD繪圖環(huán)境。
第三步:在AutoCAD的命令行中鍵入“MENU”命令,將出現(xiàn)“選擇菜單文件”對話框。在“文件類型”下拉列表框中選擇“菜單樣板”文件類型,選中ACAD.MNU文件,單擊“打開”按鈕載入該文件。此時,程序彈出提示框,由于我們并沒有對工具欄進行修改,所以單擊“是”按鈕繼續(xù)載入ACAD.MNU文件。
這樣,我們就建立了一個簡單的菜單項(如圖8所示),盡管很簡單,但是基本說明定制菜單的方法,現(xiàn)在您可以試一試每個菜單的功能了!
 

5.jpg

讓我們回過頭來看一下剛才添加的代碼。“***POP12”這一行是菜單區(qū)域的區(qū)域名。ACAD菜單組中已經(jīng)有11個菜單,所以我們將新建的菜單編號為12。為菜單區(qū)域編號不需要連續(xù),只要不與前面的菜單區(qū)域重復就可以了。從[繪制]這一行開始的每一行都表示一個菜單項。每一個菜單項是菜單里的菜單標題,方括號內(nèi)的內(nèi)容稱為菜單項標簽,簡稱標簽。在菜單項中的標簽會顯示在菜單欄中。接下來的三行都是菜單的菜單項。三行的結(jié)構(gòu)相同,方括號內(nèi)是菜單項的標題,方括號后的部分叫做菜單宏(Menu Macro),這部分是菜單命令的執(zhí)行部分。
您可能發(fā)現(xiàn)了,菜單宏中的命令與在命令行中輸入的命令行基本相同(如繪制直線命令line、畫圓命令circle等),只是前面加了一些控制字符。其中“^”表示Ctrl鍵按下的狀態(tài),^C相當于按一次+組合鍵,即中斷當前命令。連續(xù)兩個“^C”可以保證菜單的命令一定能被執(zhí)行。下劃線“_”用于將其后的字符轉(zhuǎn)換成AutoCAD命令和關鍵字。
菜單宏是與菜單項對應的命令序列,可以對菜單宏進行編程來實現(xiàn)復雜的功能。許多特殊字符也可以應用在菜單宏中實現(xiàn)一些系統(tǒng)功能,下表列出了可用于菜單宏的特殊字符。
=====================================================================
   字符 說明
=====================================================================
; 產(chǎn)生ENTER
^M 產(chǎn)生ENTER
^I 產(chǎn)生TAB
SPACEBAR 輸入空格;菜單項中命令序列之間的空格等價于按SPACEBAR
暫停以等候用戶輸入(不能用在快捷鍵部分)
- 轉(zhuǎn)換AutoCAD命令及其后的關鍵字
+ 延續(xù)菜單宏到下一行(如果是最后一個字符)
=* 顯示當前頂層的圖像、下拉菜單或快捷菜單
*^C^C 重復項的前綴
$ 加載菜單部分或輸入條件DIESEL宏表達式($M=)的特殊字符
^B ^B切換捕捉開或關(CTRL+B)
^C 取消命令(ESC)
^D 切換坐標顯示開或關(CTRL+D)
^E 設置下一個等軸測平面(CTRL+E)
^G 切換柵格開或關(CTRL+G)
^H 產(chǎn)生退格
^O 切換正交模式開或關(CTRL+O)
^P 切換MENUECHO開或關
^Q 顯示所有提示、狀態(tài)列表和打印輸入(CTRL+Q)
================================================================
利用AutoCAD提供的特殊字符可以制作各種特殊效果的菜單。我們將前面介紹的POP12菜單區(qū)域稍作修改,制作一些特殊的菜單,如分隔線、子菜單、被禁用的菜單等。修改后的菜單代碼如下:
 ***POP12
   [繪制]
   [直線(&L)tCtrl+L] ^c^c^_line
   [->圓] ^c^c_circle
   [R50圓] ^c^c_circle 50
   [<-R80圓] ^c^c_circle 80
   [--]
   [~文字] ^c^c_text
使用Menu命令重新載入ACAD.MNU菜單樣板文件,可以發(fā)現(xiàn)我們自制的“繪制”菜單增加了快捷鍵、子菜單、分隔線和禁用菜單,如圖9所示。

6.jpg

在上面的代碼中,“直線”菜單項增加了帶下劃線的菜單熱鍵(L),還增加了快捷鍵CTRL+L。它的標簽由[直線]變成了[直線(&L)tCtrl+L]。其中“&”的作用是給“&”后的第一個字符加上下劃線,并將其作為該菜單項的菜單熱鍵;“t”的作用是將其后的所有文字推向右邊,即靠右對齊。菜單項“圓”的下面增加了兩個子菜單。子菜單由一對特殊符號進行定義,符號“->”用在父菜單項標簽的開頭,表示這個菜單項含有子菜單;符號“<-”用在最后一個子菜單項標簽的開頭,表示這個菜單項是整個子菜單的最后一項。值得注意的是:這兩個符號必須成對出現(xiàn)。AutoCAD會自動忽略不能與其它符號匹配的符號,這樣“圓”菜單項也已經(jīng)失去了原有的畫圓功能。這是因為如果一個菜單項含子菜單,AutoCAD會自動忽略含該菜單項的菜單宏,這與Windows中的層疊菜單是相同的。菜單項“圓”的下面多了一條分隔線,這條分隔線是由兩個連字符“[-]”產(chǎn)生的,分隔線不能被選中,其后的任何菜單宏都會被忽略。在一個菜單項的標簽開始處加一個波浪線“~”就可以禁用該菜單項。“文字”菜單項就進行了這樣的處理。被禁用的菜單項會變?yōu)榛疑,不能被選中。當然,創(chuàng)建一個總是被禁用的菜單項是沒有任何意義的,禁用符號通過都和AutoLISP語言的條件判斷表達式組合使用,達到在特定狀態(tài)下禁用特定菜單項的目的。例如在文本編輯器中,如果沒有進行復制或剪切操作,那么粘帖菜單項就處于被禁用狀態(tài)。
這個例子很簡單,但是包括了最常用的幾個標簽控制字符的用法。AutoCAD提供的標簽控制字符還有很多,下表顯示了其它的標簽控制符。
==============================================================
字符   說明
==============================================================
-- 下拉菜單或快捷菜單中的菜單項分隔符(使用時,不能包括其它任何字符)
+ 延續(xù)宏到下一行(如果是最后一個字符)
-> 指出下拉菜單或快捷菜單具有子菜單
<- 指出子菜單中的最后一個下拉菜單項或快捷菜單項
<-<-... 指出子菜單中的最后一個下拉菜單項或快捷菜單項并且結(jié)束父菜單。(每個<-結(jié)束一級
父菜單)
$( 如果作為第一個字符,則使下拉菜單或快捷菜單項標簽求DIESEL字符串宏的值
~ 禁用菜單項的前綴符
!. 給菜單項打上復選標記的前綴符
& 直接放在下拉菜單或快捷菜單標簽中一個字符之前,把該字符指定義菜單的熱鍵。例如, S&le則將字每a下顯示一條下劃線
/ 指定下拉菜單或快捷菜單標簽的菜單熱鍵,通常與&符號配合使用
t 把標簽中這兩個字符右邊的文件置于菜單的右側(cè)