AutoCAD⼆次开发:创建⾃定义菜单(AcCui)
从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