public void MyMenu() { //获取CAD应用程序 AcadPopupMenus menus = app.MenuGroups.Item(0).Menus; foreach (AcadPopupMenu menu in menus) { if (menu.Name == "我的Com菜单") { menu.InsertInMenuBar(app.MenuBar.Count + 1); return; } } AcadPopupMenu pmParnet = menus.Add("我的Com菜单"); //添加根菜单 //多级 AcadPopupMenu pm = pmParnet.AddSubMenu(pmParnet.Count + 1, "一级菜单"); AcadPopupMenuItem pmi0 = pm.AddMenuItem(pm.Count + 1, "打开窗口 ", "OpenWindow\n"); //第一个参数是在菜单项中的位置(第几项),第二个参数是显示的名称,第三个参数是点击之后执行的命令 AcadPopupMenuItem pmi1 = pm.AddMenuItem(pm.Count + 1, "输出实体 ", "ListEntities\n"); //单级 AcadPopupMenuItem pmi2 = pmParnet.AddMenuItem(pmParnet.Count + 1, "退出", "EXIT\n"); AcadPopupMenuItem pmi3 = pmParnet.AddMenuItem(pmParnet.Count + 1, "删除我的菜单", "DeleteMenu\n"); //将创建的菜单加入到CAD的菜单中 pmParnet.InsertInMenuBar(app.MenuBar.Count + 1); }
public void AddMenuContent() { try { AcadApplication acadApp = (AcadApplication)Application.AcadApplication; //添加根菜单 AcadPopupMenu pMenu = acadApp.MenuGroups.Item(0).Menus.Add("psw二次开发"); ////添加子菜单项,多级 //AcadPopupMenu cMenu = pMenu.AddSubMenu(pMenu.Count + 1, "液压插件"); //AcadPopupMenuItem cMenuItem0 = cMenu.AddMenuItem(cMenu.Count + 1, "插件1", "hydrPlugin1\n"); //AcadPopupMenuItem cMenuItem1 = cMenu.AddMenuItem(cMenu.Count + 1, "插件2", "hydrPlugin2\n"); //AcadPopupMenuItem cMenuItem2 = cMenu.AddMenuItem(cMenu.Count + 1, "插件3", "hydrPlugin3\n"); //添加分隔条 //pMenu.AddSeparator(pMenu.Count + 1); //添加子菜单项,单级 AcadPopupMenuItem cMenu2 = pMenu.AddMenuItem(pMenu.Count + 1, "建筑插件", "architecturePlugin\n"); pMenu.InsertInMenuBar(acadApp.MenuBar.Count + 1); } catch (System.Exception ex) { Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.ToString()); } }
public static void AddCmdtoMenuBar(List <myAcCmd> cmds, string MenuName) { var gcadApp = Application.AcadApplication as AcadApplication; AcadMenuGroup mg = null; for (int i = 0; i < gcadApp.MenuGroups.Count; i++) { if (gcadApp.MenuGroups.Item(i).Name == "ACAD") { mg = gcadApp.MenuGroups.Item(i); } } for (int i = 0; i < mg.Menus.Count; i++) { if (mg.Menus.Item(i).Name == MenuName) { mg.Menus.Item(i).RemoveFromMenuBar(); } } AcadPopupMenu popMenu = mg.Menus.Add(MenuName); for (int i = 0; i < cmds.Count; i++) { var dllPopMenu = popMenu.AddMenuItem(popMenu.Count + 1, cmds[i].Label, cmds[i].Macro + " "); } popMenu.InsertInMenuBar(mg.Menus.Count + 1); }
//加载菜单栏 public void AddMenu() { Document doc = Application.DocumentManager.MdiActiveDocument; doc.Editor.WriteMessage("添加菜单栏成功!>>>>>>>>>>>>>>"); AcadApplication acadApp = Application.AcadApplication as AcadApplication; //创建建菜单栏的对象 AcadPopupMenu myMenu = null; // 创建菜单 if (myMenu == null) { // 菜单名称 myMenu = acadApp.MenuGroups.Item(0).Menus.Add("实用工具箱"); myMenu.AddMenuItem(myMenu.Count, "批量重命名PDF", "THTM "); myMenu.AddMenuItem(myMenu.Count, "测试程序", "CSCS "); myMenu.AddMenuItem(myMenu.Count, "标高及桩号初始化", "GLCSH "); myMenu.AddMenuItem(myMenu.Count, "两行数值相减", "SZXJ "); myMenu.AddMenuItem(myMenu.Count, "生成节点桩号", "JDZH "); myMenu.AddMenuItem(myMenu.Count, "拾取线生成标高", "QXBG "); myMenu.AddMenuItem(myMenu.Count, "选点生成桩号及标高", "QDZHBG "); myMenu.AddSeparator(myMenu.Count); //加入分割符号 //开始加子菜单栏 AcadPopupMenu subMenu = myMenu.AddSubMenu(myMenu.Count, "图号重排"); //子菜单对象 subMenu.AddMenuItem(myMenu.Count, "按行重排", "THCP R "); subMenu.AddMenuItem(myMenu.Count, "按列重排", "THCP C "); //结束加子菜单栏 } // 菜单是否显示 看看已经显示的菜单栏里面有没有这一栏 bool isShowed = false; //初始化没有显示 foreach (AcadPopupMenu menu in acadApp.MenuBar) //遍历现有所有菜单栏 { if (menu == myMenu) { isShowed = true; break; } } // 显示菜单 加载自定义的菜单栏 if (!isShowed) { myMenu.InsertInMenuBar(acadApp.MenuBar.Count); } }
/// <summary> 添加菜单的操作可以直接在AutoCAD运行过程中执行,而不用像Revit中一样必须要先关闭然后在程序启动时添加 </summary> public static void AddMenuItem() { // This example creates a new menu called TestMenu and inserts a menu item // into it. The menu is then displayed on the menu bar. // To remove the menu after execution of this macro, use the Customize Menu // option from the Tools menu. var app = Application.AcadApplication as AcadApplication; // AcadMenuGroup 表示AutoCAD中加载的一个.cuix文件中的菜单集合。 // MenuGroups.Item(0) 与 Menubar 中的菜单集合 并不是同一个集合,它的 MenuFileName 属性对应的文件为: // C:\Users\zengfy\appdata\roaming\autodesk\autocad 2014\r19.1\chs\support\acad.cuix AcadMenuGroup currMenuGroup = app.MenuGroups.Item(0); //Create the new menu AcadPopupMenu topPpMenu = currMenuGroup.Menus.Add("MenuHandler"); // Assign the macro string the VB equivalent of "ESC ESC _open " string openMacro = "ESC ESC _open "; // VBA 中的写法:openMacro = Chr(3) & Chr(3) & Chr(95) & "open" & Chr(32) //Add a menu item to the new menu, Macro 即对应要在命令行中输入的字符 AcadPopupMenuItem childMenuItem = topPpMenu.AddMenuItem(Index: topPpMenu.Count + 1, Label: "Open", Macro: openMacro); // 添加可以包含子项的菜单 AcadPopupMenu menuItemContainer = topPpMenu.AddSubMenu(Index: topPpMenu.Count + 1, Label: "block"); AcadPopupMenuItem childMenuItem2 = menuItemContainer.AddMenuItem(Index: menuItemContainer.Count + 1, Label: "画圆", Macro: "Circle "); // Display the menu on the menu bar // If index is a string, the name of the popup menu must contain any underscore that appears in the menu. topPpMenu.InsertInMenuBar(Index: "工具(&T)"); // Index: app.MenuBar.Count + 1 return; // 以下为功能测试项 -------------------------------------------------------- // The index must be either an integer or a string. If an integer, the index must be between 0 and N-1, where N is the number of objects in the menu bar. The new item will be added immediately before the specified index location. topPpMenu.InsertInMenuBar(Index: app.MenuBar.Count + 1); // 从 MenuBar 提取一个菜单项。 // 注意:MenuBar 只能用来读取其中的 AcadPopupMenu 集合,而不能操纵菜单项的添加或移除。 AcadMenuBar mb = app.MenuBar; // 下面这个Item(0)对应的是AutoCAD界面中菜单栏中的第一个菜单项,通常这个菜单项为“文件(F)” AcadPopupMenu ppm1 = mb.Item(0); // 将菜单项从 MenuBar 中移除 topPpMenu.RemoveFromMenuBar(); }
public void AddMenuCom() { //COM方式获取AutoCAD应用程序对象 AcadApplication acadApp = (AcadApplication)Application.AcadApplication; //为AutoCAD添加一个新的菜单 主菜单 AcadPopupMenu mainMenu = acadApp.MenuGroups.Item(0).Menus.Add("W.插件"); //声明一个AutoCAD弹出菜单项,用于获取添加的菜单项对象 AddTestMenu(mainMenu); AddFontChangerMenu(mainMenu); AddPileFoundationMenu(mainMenu); //将定义的菜单显示在AutoCAD菜单栏的最后 mainMenu.InsertInMenuBar(acadApp.MenuBar.Count + 1); }
/// <summary> /// 添加菜单项 /// </summary> public void AddMenuContent() { try { AcadApplication acadApp = (AcadApplication)Application.AcadApplication; //添加根菜单 AcadPopupMenu pMenu = acadApp.MenuGroups.Item(0).Menus.Add("EPDI_Plugin"); AcadPopupMenuItem cMenu2 = pMenu.AddMenuItem(pMenu.Count + 1, "建筑插件", "architecturePlugin\n"); pMenu.InsertInMenuBar(acadApp.MenuBar.Count + 1); } catch (System.Exception ex) { Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.ToString()); } }
public void AddMenu() { Document doc = Application.DocumentManager.MdiActiveDocument; AcadApplication acadApp = Application.AcadApplication as AcadApplication; //创建建菜单栏的对象 AcadPopupMenu myMenu = null; // 创建菜单 if (myMenu == null) { // 菜单名称 myMenu = acadApp.MenuGroups.Item(0).Menus.Add("BF Custom Tools"); myMenu.AddMenuItem(myMenu.Count, "改比例", "GBL "); //每个命令后面有一个空格,相当于咱们输入命令按空格 myMenu.AddMenuItem(myMenu.Count, "自动归层", "ZDGC "); myMenu.AddMenuItem(myMenu.Count, "绘图环境", "HTHJ "); //开始加子菜单栏 AcadPopupMenu subMenu = myMenu.AddSubMenu(myMenu.Count, "BlockTools"); //子菜单对象 subMenu.AddMenuItem(myMenu.Count, "插入灯具", "CDJ "); subMenu.AddMenuItem(myMenu.Count, "插入图框", "TK "); subMenu.AddMenuItem(myMenu.Count, "插入铝材", "LXC "); myMenu.AddSeparator(myMenu.Count); //加入分割符号 //结束加子菜单栏 } // 菜单是否显示 看看已经显示的菜单栏里面有没有这一栏 bool isShowed = false; //初始化没有显示 foreach (AcadPopupMenu menu in acadApp.MenuBar) //遍历现有所有菜单栏 { if (menu == myMenu) { isShowed = true; break; } } // 显示菜单 加载自定义的菜单栏 if (!isShowed) { myMenu.InsertInMenuBar(acadApp.MenuBar.Count); } doc.Editor.WriteMessage("\n添加菜单栏成功!………………………………………………"); }
//加载菜单栏 public void AddMenu() { Document doc = Application.DocumentManager.MdiActiveDocument; doc.Editor.WriteMessage("添加菜单栏成功!>>>>>>>>>>>>>>"); AcadApplication acadApp = Application.AcadApplication as AcadApplication; //创建建菜单栏的对象 AcadPopupMenu myMenu = null; // 创建菜单 if (myMenu == null) { // 菜单名称 myMenu = acadApp.MenuGroups.Item(0).Menus.Add("个人专用菜单工具(2020.07)"); myMenu.AddMenuItem(myMenu.Count, "文字批量替换", "TBR "); //每个命令后面有一个空格,相当于咱们输入命令按空格 myMenu.AddMenuItem(myMenu.Count, "文字批量对齐", "TBA "); myMenu.AddMenuItem(myMenu.Count, "输出文本", "CTE "); //开始加子菜单栏 AcadPopupMenu subMenu = myMenu.AddSubMenu(myMenu.Count, "CADLinkToEXcel"); //子菜单对象 subMenu.AddMenuItem(myMenu.Count, "Excel表格导入", "CTES "); subMenu.AddMenuItem(myMenu.Count, "由Excel数据更新CAD表格数据", "UCTFE "); subMenu.AddMenuItem(myMenu.Count, "由CAD表格数据更新Excel表格数据", "UEFCT "); myMenu.AddSeparator(myMenu.Count); //加入分割符号 //结束加子菜单栏 } // 菜单是否显示 看看已经显示的菜单栏里面有没有这一栏 bool isShowed = false; //初始化没有显示 foreach (AcadPopupMenu menu in acadApp.MenuBar) //遍历现有所有菜单栏 { if (menu == myMenu) { isShowed = true; break; } } // 显示菜单 加载自定义的菜单栏 if (!isShowed) { myMenu.InsertInMenuBar(acadApp.MenuBar.Count); } }
/// <summary> /// 添加测试菜单 /// </summary> /// <param name="mainMenu"></param> private static void AddTestMenu(AcadPopupMenu mainMenu) { AcadPopupMenuItem popMenuItemTest; //在新建的菜单中添加一个一级菜单 AcadPopupMenu popMenuTest = mainMenu.AddSubMenu(mainMenu.Count + 1, "测试功能 "); //添加子菜单 popMenuItemTest = popMenuTest.AddMenuItem(popMenuTest.Count + 1, "欢迎", "HelloWorld "); popMenuItemTest.HelpString = "欢迎"; //状态栏提示信息 popMenuTest.AddSeparator(popMenuTest.Count + 1); //添加子菜单 popMenuItemTest = popMenuTest.AddMenuItem(popMenuTest.Count + 1, "图层信息", "GetLayerPro "); popMenuItemTest.HelpString = "图层信息"; //状态栏提示信息 popMenuTest.AddSeparator(popMenuTest.Count + 1); //添加一个分隔条以区分不同类型的命令 mainMenu.AddSeparator(mainMenu.Count + 1); }
private void Dfs(XmlNodeList nodes, AcadPopupMenu parentMenu) { var position = 1; foreach (XmlNode node in nodes) { position++; var typeAttribute = node.Attributes["type"]; if (typeAttribute == null) { MessageBox.Show("MenuItemType was null", "E R R O R", MessageBoxButtons.OK, MessageBoxIcon.Error); continue; } MenuItemType type; var availableType = MenuItemType.TryParse(typeAttribute.Value, out type); if (!availableType) { MessageBox.Show("Unrecognized menu item type", "E R R O R", MessageBoxButtons.OK, MessageBoxIcon.Error); continue; } switch (type) { case MenuItemType.MenuItem: var label = node.Attributes["label"].Value; var macro = node.Attributes["macro"].Value; parentMenu.AddMenuItem(position, label, macro); break; case MenuItemType.Separator: parentMenu.AddSeparator(position); break; case MenuItemType.SubMenu: label = node.Attributes["label"].Value; var menu = parentMenu.AddSubMenu(position, label); Dfs(node.ChildNodes, menu); break; default: throw new ArgumentOutOfRangeException(); } } }
/// <summary> /// 添加桩基信息的菜单 /// </summary> /// <param name="mainMenu"></param> private static void AddPileFoundationMenu(AcadPopupMenu mainMenu) { AcadPopupMenuItem popMenuItemPileFoundation; //在新建的菜单中添加一个一级菜单 桩基 AcadPopupMenu popMenuPileFoundation = mainMenu.AddSubMenu(mainMenu.Count + 1, "桩基功能 "); //添加子菜单 popMenuItemPileFoundation = popMenuPileFoundation.AddMenuItem(popMenuPileFoundation.Count + 1, "桩信息", "GetPileInfo "); popMenuItemPileFoundation.HelpString = "读取桩的基本信息"; //状态栏提示信息 popMenuPileFoundation.AddSeparator(popMenuPileFoundation.Count + 1); //添加子菜单 popMenuItemPileFoundation = popMenuPileFoundation.AddMenuItem(popMenuPileFoundation.Count + 1, "桩位置", "GetPileCoordinate "); popMenuItemPileFoundation.HelpString = "选取区域,读取桩的坐标"; //状态栏提示信息 popMenuPileFoundation.AddSeparator(popMenuPileFoundation.Count + 1); //添加一个分隔条以区分不同类型的命令 mainMenu.AddSeparator(mainMenu.Count + 1); }
/// <summary> /// 添加字体自动替换的菜单 /// </summary> /// <param name="mainMenu"></param> private static void AddFontChangerMenu(AcadPopupMenu mainMenu) { //声明一个AutoCAD弹出菜单项,用于获取添加的菜单项对象 AcadPopupMenuItem popMenuItemFont; //在新建的菜单中添加一个一级菜单 AcadPopupMenu popMenuFont = mainMenu.AddSubMenu(mainMenu.Count + 1, "字体替换 "); //添加子菜单 popMenuItemFont = popMenuFont.AddMenuItem(popMenuFont.Count + 1, "开启", "StartFontChange "); popMenuItemFont.HelpString = "开启字体自动替换"; //状态栏提示信息 popMenuFont.AddSeparator(popMenuFont.Count + 1); //添加子菜单 popMenuItemFont = popMenuFont.AddMenuItem(popMenuFont.Count + 1, "关闭", "StopFontChange "); popMenuItemFont.HelpString = "关闭字体自动替换"; //状态栏提示信息 popMenuFont.AddSeparator(popMenuFont.Count + 1); //添加一个分隔条以区分不同类型的命令 mainMenu.AddSeparator(mainMenu.Count + 1); }
public void ShowMyMenu() { //获取CAD应用程序 AcadApplication app = (AcadApplication)Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication; for (int i = 0; i < app.MenuGroups.Item(0).Menus.Count; i++) { if (app.MenuGroups.Item(0).Menus.Item(i).Name == "控规入库") //判断菜单是否已存在,如果存在则不再创建 { return; } } AcadPopupMenu pmParnet = app.MenuGroups.Item(0).Menus.Add("控规入库"); //添加根菜单 ////多级 //AcadPopupMenu pm = pmParnet.AddSubMenu(pmParnet.Count + 1, "打开"); //AcadPopupMenuItem pmi0 = pm.AddMenuItem(pm.Count + 1, "文件 ", "OPEN1\n"); //第一个参数是在菜单项中的位置(第几项),第二个参数是显示的名称,第三个参数是点击之后执行的命令 //AcadPopupMenuItem pmi1 = pm.AddMenuItem(pm.Count + 1, "模版 ", "OPEN2\n"); //单级 AcadPopupMenuItem pmi2 = pmParnet.AddMenuItem(pmParnet.Count + 1, "数据发布 ", "ShowMainForm\n"); //单级 AcadPopupMenuItem pmi5 = pmParnet.AddMenuItem(pmParnet.Count + 1, "批量发布", "SendPointPlans\n"); //单级 //AcadPopupMenuItem pmi6 = pmParnet.AddMenuItem(pmParnet.Count + 1, "单元图则批量发送", "SendUnitPlans\n"); //单级 //AcadPopupMenuItem pmi3 = pmParnet.AddMenuItem(pmParnet.Count + 1, "一般数据检测 ", "AutoShowMainForm\n"); //单级 //AcadPopupMenuItem pmi4 = pmParnet.AddMenuItem(pmParnet.Count + 1, "自动删除多余图层", "AutoDeleteLayer\n"); //单级 AcadPopupMenuItem pmi6 = pmParnet.AddMenuItem(pmParnet.Count + 1, "项目定义", "ProjectDefine\n"); //单级 AcadPopupMenuItem pmi7 = pmParnet.AddMenuItem(pmParnet.Count + 1, "自动生成编码", "AutoGenerateNumber\n"); //将创建的菜单加入到CAD的菜单中 pmParnet.InsertInMenuBar(app.MenuBar.Count + 1); }
public void AddMenu() { //COM方式获取AutoCAD应用程序对象 AcadApplication acadApp = (AcadApplication)Application.AcadApplication; //为AutoCAD添加一个新的菜单,并设置标题为"我的菜单" AcadPopupMenu pm = acadApp.MenuGroups.Item(0).Menus.Add("我的菜单"); //声明一个AutoCAD弹出菜单项,用于获取添加的菜单项对象 AcadPopupMenuItem pmi; //在新建的菜单中添加一个名为"圆"的菜单项,以调用绘制圆命令 pmi = pm.AddMenuItem(pm.Count + 1, "圆", "_Circle "); //设置状态栏提示信息 pmi.HelpString = "用指定半径创建圆"; //添加名为"直线"的菜单项,以调用绘制直线命令 pmi = pm.AddMenuItem(pm.Count + 1, "直线", "_Line "); pmi.HelpString = "创建直线段"; //添加名为"多段线"的菜单项,以调用绘制多段线命令 pmi = pm.AddMenuItem(pm.Count + 1, "多段线", "_Polyline "); pmi.HelpString = "创建二维多段线"; //添加名为"矩形"的菜单项,以调用绘制矩形多段线命令 pmi = pm.AddMenuItem(pm.Count + 1, "矩形", "_Rectangle "); pmi.HelpString = "创建矩形多段线"; //添加一个分隔条以区分不同类型的命令 pm.AddSeparator(pm.Count + 1); //添加一个名为"修改"的子菜单 AcadPopupMenu menuModify = pm.AddSubMenu(pm.Count + 1, "修改"); //在"修改"子菜单下添加用于复制、删除、移动及旋转操作的菜单项,并设置相应的状态栏提示信息 pmi = menuModify.AddMenuItem(menuModify.Count + 1, "复制", "_Copy "); pmi.HelpString = "复制对象"; pmi = menuModify.AddMenuItem(menuModify.Count + 1, "删除", "_Erase "); pmi.HelpString = "从图形删除对象"; pmi = menuModify.AddMenuItem(menuModify.Count + 1, "移动", "_Move "); pmi.HelpString = "移动对象"; pmi = menuModify.AddMenuItem(menuModify.Count + 1, "旋转", "_Rotate "); pmi.HelpString = "绕基点旋转对象"; //将定义的菜单显示在AutoCAD菜单栏的最后 pm.InsertInMenuBar(acadApp.MenuBar.Count + 1); }
public static void AddCmdtoMenuBar(List <gcadDllcmd> cmds) { var dllName = Assembly.GetExecutingAssembly().ManifestModule.Name.Substring(0, Assembly.GetExecutingAssembly().ManifestModule.Name.Length - 4); var gcadApp = Application.AcadApplication as AcadApplication; AcadMenuGroup mg = null; for (int i = 0; i < gcadApp.MenuGroups.Count; i++) { if (gcadApp.MenuGroups.Item(i).Name == "ACAD") { mg = gcadApp.MenuGroups.Item(i); } } for (int i = 0; i < mg.Menus.Count; i++) { if (mg.Menus.Item(i).Name == dllName) { mg.Menus.Item(i).RemoveFromMenuBar(); } } AcadPopupMenu popMenu = mg.Menus.Add(dllName); for (int i = 0; i < cmds.Count; i++) { var dllPopMenu = popMenu.AddSubMenu(popMenu.Count + 1, cmds[i].DllName); for (int j = 0; j < cmds[i].clsCmds.Count; j++) { var clsPopMenu = dllPopMenu.AddSubMenu(dllPopMenu.Count + 1, cmds[i].clsCmds[j].clsName); for (int k = 0; k < cmds[i].clsCmds[j].curClscmds.Count; k++) { var methodPopMenu = clsPopMenu.AddMenuItem(clsPopMenu.Count + 1, cmds[i].clsCmds[j].curClscmds[k].cmdName, cmds[i].clsCmds[j].curClscmds[k].cmdMacro + " "); } } } popMenu.InsertInMenuBar(mg.Menus.Count + 1); }
private void AddMenuBar() { try { //COM方式获取AutoCAD应用程序对象 AcadApplication acadApp = (AcadApplication)services.Application.AcadApplication; //为AutoCAD添加一个新的菜单 AcadPopupMenu pm = acadApp.MenuGroups.Item(0).Menus.Add("PDM"); //声明一个AutoCAD弹出菜单项,用于获取添加的菜单项对象 AcadPopupMenuItem pmi; //在新建的菜单中添加新的菜单 //string[] strMenu = { "登录", "注销", "当前状态", "|", "图纸初始化", "清除初始化信息", "编辑图纸信息", "编辑主关联零部件", "查看主关联零部件", "|", "图纸检入", "图纸查看", "图纸检出", "取消图纸检出", "|", "关于" }; //string[] menuCmd = { "login ", "logout ", "status ", "|", "Init ", "clearInit ", "editDrawing ", "editParts ", "viewParts ", "|", "drawingIn ", "drawingView ", "drawingOut ", "cancelOut ", "|", "aboutPDM " }; string[] strMenu = { "登录", "注销", /*"当前状态",*/ "|", "图纸初始化", /*"清除初始化信息",*/ "编辑图纸信息", /*"编辑主关联零部件", "查看主关联零部件", */ "|", "图纸检入", "图纸查看", "图纸检出", /*"取消图纸检出",*/ "|", "关于" }; string[] menuCmd = { "login ", "logout ", /*"status ",*/ "|", "Init ", /*"clearInit ",*/ "editDrawing ", /*"editParts ", "viewParts ", */ "|", "drawingIn ", "drawingView ", "drawingOut ", /*"cancelOut ",*/ "|", "aboutPDM " }; for (int i = 0; i < strMenu.Length; i++) { if (!strMenu[i].Equals("|")) { pmi = pm.AddMenuItem(pm.Count + 1, strMenu[i], menuCmd[i]); if (i != 0) { pmi.Enable = false; } } else { pm.AddSeparator(pm.Count + 1); } } pm.InsertInMenuBar(acadApp.MenuBar.Count + 1); } catch (Autodesk.AutoCAD.Runtime.Exception ex) { MessageBox.Show(ex.Message); } }
private void AddMenus(AcadApplication app, string menuName, List <MethodInfo> methods) { // This example creates a new menu called TestMenu and inserts a menu item // into it. The menu is then displayed on the menu bar. // To remove the menu after execution of this macro, use the Customize Menu // option from the Tools menu. // AcadMenuGroup 表示AutoCAD中加载的一个.cuix文件中的菜单集合。 // MenuGroups.Item(0) 与 Menubar 中的菜单集合 并不是同一个集合,它的 MenuFileName 属性对应的文件为: // C:\Users\zengfy\appdata\roaming\autodesk\autocad 2014\r19.1\chs\support\acad.cuix AcadMenuGroup currMenuGroup = app.MenuGroups.Item(0); //Create the new menu foreach (AcadPopupMenu m in currMenuGroup.Menus) { if (m.Name == menuName) { return; m.RemoveFromMenuBar(); break; } } AcadPopupMenu topPpMenu = currMenuGroup.Menus.Add(menuName); foreach (var mtd in methods) { var att = mtd.GetCustomAttributes(typeof(CommandMethodAttribute)).First() as CommandMethodAttribute; // Assign the macro string the VB equivalent of "ESC ESC _open " //string openMacro = "ESC ESC _open "; // VBA 中的写法:openMacro = Chr(3) & Chr(3) & Chr(95) & "open" & Chr(32) //Add a menu item to the new menu, Macro 即对应要在命令行中输入的字符 string label; // label = string.IsNullOrEmpty(att.LocalizedNameId) ? att.GlobalName : att.LocalizedNameId; var des = mtd.GetCustomAttributes(typeof(DisplayNameAttribute)).FirstOrDefault() as DisplayNameAttribute; label = des != null && !string.IsNullOrEmpty(des.DisplayName) ? des.DisplayName : att.GlobalName; AcadPopupMenuItem childMenuItem = topPpMenu.AddMenuItem(Index: topPpMenu.Count + 1, Label: label, Macro: att.GlobalName + "\n"); //// 添加可以包含子项的菜单 //AcadPopupMenu menuItemContainer = topPpMenu.AddSubMenu(Index: topPpMenu.Count + 1, Label: "block"); //AcadPopupMenuItem childMenuItem2 = menuItemContainer.AddMenuItem(Index: menuItemContainer.Count + 1, // Label: "画圆", Macro: "Circle "); } // Display the menu on the menu bar // If index is a string, the name of the popup menu must contain any underscore that appears in the menu. topPpMenu.InsertInMenuBar(Index: app.MenuBar.Count + 1); // Index: "工具(&T)" return; // 以下为功能测试项 -------------------------------------------------------- // The index must be either an integer or a string. If an integer, the index must be between 0 and N-1, where N is the number of objects in the menu bar. The new item will be added immediately before the specified index location. topPpMenu.InsertInMenuBar(Index: app.MenuBar.Count + 1); // 从 MenuBar 提取一个菜单项。 // 注意:MenuBar 只能用来读取其中的 AcadPopupMenu 集合,而不能操纵菜单项的添加或移除。 AcadMenuBar mb = app.MenuBar; // 下面这个Item(0)对应的是AutoCAD界面中菜单栏中的第一个菜单项,通常这个菜单项为“文件(F)” AcadPopupMenu ppm1 = mb.Item(0); // 将菜单项从 MenuBar 中移除 topPpMenu.RemoveFromMenuBar(); }