從CAD2007之后,Autodesk提供了一個新的程序集AcCui.dll,使用這個程序集,我們可以方便地做一些界面方面的操作,比如創建自定義菜單。
下面介紹一下菜單的創建過程:
1、在項目中添加引用:AcCui.dll,這個DLL存放在CAD的安裝目錄中。但是,好像CAD2007之前的版本里沒有這個DLL),我電腦上安裝了CAD2004、CAD2005、CAD2008、CAD2010,其中,只有CAD2008和CAD2010中有這個DLL。
2、在代碼中添加using:
using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Customization; using System.Collections.Specialized;
3、聲明一個自定義組,在這個組中可以自定義我們的命令、菜單、工具欄等。
//自定義的組名 string strMyGroupName = "MyGroup"; //保存的CUI文件名(從CAD2010開始,后綴改為了cuix) string strCuiFileName = "MyMenu.cui"; //創建一個自定義組(這個組中將包含我們自定義的命令、菜單、工具欄、面板等) CustomizationSection myCSection = new CustomizationSection(); myCSection.MenuGroupName = strMyGroupName;
4、創建命令組,並添加菜單命令
//創建自定義命令組 MacroGroup mg = new MacroGroup("MyMethod", myCSection.MenuGroup); MenuMacro mm1 = new MenuMacro(mg, "打開文件", "OF", ""); MenuMacro mm2 = new MenuMacro(mg, "打開模板", "OM", ""); MenuMacro mm3 = new MenuMacro(mg, "保存", "SV", "");
5、創建菜單,如果菜單項是單級菜單,則直接聲明為PopMenuItem即可;如果菜單項下有子級,則將其子級放到一個PopMenu中,然后將這個PopMenu放到PopMenuRef中,最后將PopMenuRef放到總菜單中。按照這個原理,可以創建多級菜單。
//聲明菜單別名 StringCollection scMyMenuAlias = new StringCollection(); scMyMenuAlias.Add("MyPop1"); scMyMenuAlias.Add("MyTestPop"); //菜單項(將顯示在項部菜單欄中) PopMenu pmParent = new PopMenu("我的菜單", scMyMenuAlias, "我的菜單", myCSection.MenuGroup); //子項的菜單(多級) PopMenu pm1 = new PopMenu("打開", new StringCollection(), "", myCSection.MenuGroup); PopMenuRef pmr1 = new PopMenuRef(pm1, pmParent, -1); PopMenuItem pmi1 = new PopMenuItem(mm1, "文件", pm1, -1); PopMenuItem pmi2 = new PopMenuItem(mm2, "模板", pm1, -1); //子項的菜單(單級) PopMenuItem pmi3 = new PopMenuItem(mm3, "保存(&S)", pmParent, -1);
6、保存菜單文件
// 最后保存文件 myCSection.SaveAs(strCuiFileName);
本來還想實現菜單的自動加載,但是CUI菜單必須用cuiload命令進行加載,在網上找到的方法都是向CAD發送lisp命令調用cuiload,但是我沒有調用成功過。
下面是一個測試程序的源碼,開發環境是:VS2005 + CAD2008