![]() |
【转帖】cad界面操作cuisamp例程源代码及中文注释(一)
cad界面操作cuisamp例程源代码及中文注释(一)
www.dimcax.com cad界面操作cuisamp例程源代码及中文注释(一) , , , , partials ; int numpartialfiles; yesnoignoretoggle yes = yesnoignoretoggle.yes; yesnoignoretoggle no = yesnoignoretoggle.no; //当enterprise cui文件被成功装载的时候为真实 bool entcsloaded; //本例程代码中ed 代表命令行接口 // 在接口充许我们发布命令和显示信息 editor ed = application.documentmanager.mdiactivedocument.editor; //默认构造函数 public cuisamp() { // 在找回的位置打开 main cui文件 string maincuifile = (string)application.getsystemvariable("menuname");// 从autocad系统变量menuname得到main cui文件 maincuifile += ".cui"; //得到的只有主文件名所以加扩展名 cs = new customizationsection(maincuifile); string entcuifile = (string)application.getsystemvariable("enterprisemenu"); if( entcuifile.equals(".")) entcsloaded = false; else { entcs = new customizationsection(entcuifile); entcsloaded = true; } // 在main cui文件之后装入partial cui文件 partials = new customizationsection[cs.partialcuifiles.count]; int i=0; foreach(string filename in cs.partialcuifiles) { if (file.exists(filename)) { partials[i] = new customizationsection(filename); i++; } } numpartialfiles = i; } ,而荒于嬉; 行成于思,而毁于随。勿以善小而不为,勿以恶小而为之。 // 以下是注册一个 savecui命令 //这个命令保存已经修改的所有cui文件 [commandmethod("savecui")] public void savecui() { // 在这部分保存所有更改到cui文件。 //如果保存了main cui文件则partial cui文件也必须保存。 if(cs.ismodified) cs.save(); for(int i=0;i < numpartialfiles;i++) { if(partials[i].ismodified) partials[i].save(); } if(entcsloaded && entcs.ismodified) entcs.save(); //这里我们卸载后再装载main cui文件,所以改变后的cui文件能立即生效. string flname = cs.cuifilebasename; application.setsystemvariable("filedia",0); application.documentmanager.mdiactivedocument.sendstringtoexecute("cuiunload " + flname + " ",false,false,false); application.documentmanager.mdiactivedocument.sendstringtoexecute("cuiload " + flname + " filedia 1 ",false,false,false); } // lisp 语言可调用函数: savecui //为savecui 命令lisp语言封装 [lispfunction("savecui")] public void savecui(resultbuffer args) { savecui(); } // 命令: addmenu //此命令中增加了一个叫custom menu新的菜单到所有空间,其中包含2个子项 //这个菜单首先添加到main cui文件,然后添加到所有的工作空间。 [commandmethod("addmenu")] public void addmenu() { if (cs.menugroup.popmenus.isnamefree("custom menu")) { system.collections.specialized.stringcollection pmaliases = new system.collections.specialized.stringcollection(); pmaliases.add("pop12"); popmenu pm = new popmenu("custom menu",pmaliases,"custom menu",cs.menugroup); additemstopm(pm); addmenu2workspaces(pm); } else ed.writemessage("custom menu already exists\n"); } // lisp 语言可调用函数: addmenu //为addmenu 命令lisp语言封装 [lispfunction("addmenu")] public void addmenu(resultbuffer args) { addmenu(); } //添加一个新菜单项到popmenu private void additemstopm(popmenu pm) { popmenuitem pmi = new popmenuitem(pm,-1); pmi.macroid = "id_augi";pmi.name = "autodesk user group international"; pmi = new popmenuitem(pm,-1); pmi = new popmenuitem(pm,-1); pmi.macroid = "id_customsafe";pmi.name = "online developer center"; } //添加菜单的所有工作空间 private void addmenu2workspaces(popmenu pm) { foreach(workspace wk in cs.workspaces) { workspacepopmenu wkpm = new workspacepopmenu(wk,pm); wkpm.display = 1; } } // 命令: remmenu //此命令删除在前而从main cui文件和任何空间已经加载的菜单 [commandmethod("remmenu")] public void remmenu() { //检索菜单项,从有它存在的工作空间里把它删除。 省略了这一步会有垃圾残留在工作空间里。 //从 cui 文件的菜单列表把指定菜单删除。 popmenu pm = cs.menugroup.popmenus.findpopwithalias("pop12"); if (pm != null ) { foreach(workspace wk in cs.workspaces) { workspacepopmenu wkpm = wk.workspacepopmenus.findworkspacepopmenu(pm.elementid,pm.parent.name); if(wkpm != null) wk.workspacepopmenus.remove(wkpm); } cs.menugroup.popmenus.remove(pm); //从 acad菜单组删除菜单 } } // lisp 语言可调用函数: remmenu //为remmenu命令lisp语言封装 [lispfunction("remmenu")] public void remmenu(resultbuffer args) { remmenu(); } //命令: addws // 这个命令是创建一个工作空间.工作空间的名字从autocad命令行中得到。 [commandmethod("addws")] public void addws() { string wsname; promptresult prs = ed.getstring("请输入要创建的工作空间的名字: "); if(promptstatus.ok == prs.status ) { wsname = prs.stringresult; if(-1 == cs.workspaces.indexofworkspacename(wsname)) //如果工作空间不存在 { workspace nwws = new workspace (cs, wsname); //创建工作空间 savecui(); // 保存并重新加载cui文件 } else { ed.writemessage("这个工作空间的名字已存在!"); } } } // lisp 语言可调用函数: addws //为 addws 命令lisp语言封装 [lispfunction("addws")] public void addws(resultbuffer args) { addws(); } // 命令: remws //这个命令是删除一个工作空间.工作空间的名字从autocad命令行中得到 [commandmethod("remws")] public void remws() { string wsname; promptresult prs = ed.getstring("请输入要移除的工作空间的名字: "); if(promptstatus.ok == prs.status ) { wsname = prs.stringresult; if(-1 != cs.workspaces.indexofworkspacename(wsname)) //如果工作空间存在 { cs.deleteworkspace(wsname); //删除工作空间 savecui(); //保存并重新加载cui文件 } else { ed.writemessage("这个工作空间的名字不存在!"); } } } // lisp 语言可调用函数: remws //为 addws 命令lisp语言封装 [lispfunction("remws")] public void remws(resultbuffer args) { remws(); } // 命令: cuishortcut //为cui命令增加快捷键按下ctrl+b就会很轻松的实现调用 [commandmethod("cuishortcut")] public void shortcut() { //在这里我们将为命令自定义组合快捷键 macrogroup mg = cs.menugroup.macrogroups[0]; //搜索acad宏 foreach (menumacro mcr in mg.menumacros) { if(mcr.elementid.equals("mm_1570")) { menuaccelerator ma = new menuaccelerator(mcr,cs.menugroup); ma.acceleratorshortcutkey = "ctrl+b"; } } } // lisp 语言可调用函数: cuishortcut //为cuishortcut 命令lisp语言封装 [lispfunction("cuishortcut")] public void shortcut(resultbuffer args) { shortcut(); } ,而荒于嬉; 行成于思,而毁于随。勿以善小而不为,勿以恶小而为之。 顶一下,以示支持 继续研究学习cad二次开发,从中寻觅人生乐趣! |
| 所有的时间均为北京时间。 现在的时间是 11:34 PM. |