AutoCAD二次开发三种添加插件按钮的方法之二
2015-12-14 20:30
906 查看
上一篇相关文章主要借助了cuix配置文件来制作插件按钮,但是对于纯码农来说还是喜欢以代码来说话,今天这篇文章就来讲讲纯代码添加按钮。
开发IDE:VS2010
环境:.Net Framework4.0
AutoCAD版本:2014中/EN
今天介绍的代码主要借助的是AcCui.dll这个动态链接库,因为在我的了解中,CAD的开发库中有很多类似的类,又没有相关的介绍API的文档(你不是专业人员真是心累~),都是自己尝试或者在AutoDesk社区中找到的相关内容。
下面先说说思路,再添加核心代码,如果你有需要,欢迎关注我或者联系我,我很愿意与你共享资源与共同学习进步
。
1.首先还是要找到相关的主cuix文件,就是AutoCAD二次开发三种添加插件按钮的方法之一中介绍的acad.cuix文件(我觉得添加图片排版太不方便了,所以尽量减少图片~);
2.由于我们是需要将按钮添加到‘插件’这个Tab中,而这个Tab是在Ribbon中的(而AutoCAD又是可以自定义是否显示Ribbon的,而且不同的工作空间显示的Ribbon还不同,所以我这里尽量简化了,不讨论那些了),这个Tab的ElementID叫做RBN_00012112,我们可以根据此判断这个Tab是否存在还是被删掉了(默认安装时存在的);这里只讨论存在的咯。
3.如果存在,我们直接获取到这个Tab,在其中在其中添加一个Panel按钮;
4.在这个自定义的Panel直接添加按钮,最后重新加载所有menu。
最后,效果和第一篇最后的效果是一样的哦!~
开发IDE:VS2010
环境:.Net Framework4.0
AutoCAD版本:2014中/EN
今天介绍的代码主要借助的是AcCui.dll这个动态链接库,因为在我的了解中,CAD的开发库中有很多类似的类,又没有相关的介绍API的文档(你不是专业人员真是心累~),都是自己尝试或者在AutoDesk社区中找到的相关内容。
下面先说说思路,再添加核心代码,如果你有需要,欢迎关注我或者联系我,我很愿意与你共享资源与共同学习进步
。
1.首先还是要找到相关的主cuix文件,就是AutoCAD二次开发三种添加插件按钮的方法之一中介绍的acad.cuix文件(我觉得添加图片排版太不方便了,所以尽量减少图片~);
//获取到ACAD.cuix CustomizationSection cs = new CustomizationSection((string)Application.GetSystemVariable("MENUNAME")); string strCurWorkspace = (string)Application.GetSystemVariable("WSCURRENT"); //workspace的操作 Workspace curWorkspace = cs.getWorkspace(strCurWorkspace); if (IsExistPluginTab(ed, curWorkspace))//如果自定义工作空间存在指定的Tab { //初始化功能按钮 InitialRibbonBtn(ed, cs); }
2.由于我们是需要将按钮添加到‘插件’这个Tab中,而这个Tab是在Ribbon中的(而AutoCAD又是可以自定义是否显示Ribbon的,而且不同的工作空间显示的Ribbon还不同,所以我这里尽量简化了,不讨论那些了),这个Tab的ElementID叫做RBN_00012112,我们可以根据此判断这个Tab是否存在还是被删掉了(默认安装时存在的);这里只讨论存在的咯。
3.如果存在,我们直接获取到这个Tab,在其中在其中添加一个Panel按钮;
/// <summary> /// 在acad.cuix中的(选项卡)Tab中添加panel /// </summary> /// <param name="cs">acad.cuix的引用</param> /// <param name="tabName">Tab的中文名字</param> /// <param name="tabEnName">Tab的英文版名称</param> /// <param name="panelName">新建的Panel名称(自定义)</param> /// <returns></returns> private Autodesk.AutoCAD.Customization.RibbonPanelSource AddRibbonPanelToTab(CustomizationSection cs, string tabName,string tabEnName, string panelName) { RibbonRoot root = cs.MenuGroup.RibbonRoot; Autodesk.AutoCAD.Customization.RibbonPanelSourceCollection panels = root.RibbonPanelSources; RibbonTabSource rts = root.FindTab("RBN_00012112");//ElementID if (rts == null) { Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("未找到指定的插件Tab"); } if (rts.Name == tabName || rts.Name == tabEnName) { //创建一个panel并添加到panels集合中 Autodesk.AutoCAD.Customization.RibbonPanelSource panelSrc = new Autodesk.AutoCAD.Customization.RibbonPanelSource(root); panelSrc.Text = panelSrc.Name = panelName; panelSrc.ElementID = panelSrc.Id = panelName + "_PanelSourceID"; panels.Add(panelSrc); RibbonPanelSourceReference ribPanelSourceRef = new RibbonPanelSourceReference(rts); ribPanelSourceRef.PanelId = panelSrc.ElementID; rts.Items.Add(ribPanelSourceRef); return panelSrc; } return null; }
4.在这个自定义的Panel直接添加按钮,最后重新加载所有menu。
private void InitialRibbonBtn(Editor ed, CustomizationSection cs) { Autodesk.AutoCAD.Customization.RibbonPanelSource panelSrc = AddRibbonPanelToTab(cs, "插件", "Plug-ins","测试Panel"); MacroGroup macGroup = cs.MenuGroup.MacroGroups[0]; //int macroCount = cs.MenuGroup.MacroGroups.Count; //foreach (MacroGroup macro in cs.MenuGroup.MacroGroups) //{ // string name = macro.Name; //} RibbonRow row = new RibbonRow(); panelSrc.Items.Add((Autodesk.AutoCAD.Customization.RibbonItem)row); RibbonCommandButton button1 = new RibbonCommandButton(row); button1.Text = "测试LargeBtn1"; MenuMacro menuMac1 = macGroup.CreateMenuMacro("Button1_Macro", "^C^CButton1_Command ", "Button1_Tag", "Button1_Help", MacroType.Any, "RibbonImages//test16.png", "RibbonImages//test32.png", "Button1_Label_Id"); button1.MacroID = menuMac1.ElementID; button1.ButtonStyle = RibbonButtonStyle.LargeWithText; button1.KeyTip = "Button1 Key Tip"; button1.TooltipTitle = "Button1 Tooltip Title!"; row.Items.Add((Autodesk.AutoCAD.Customization.RibbonItem)button1); RibbonCommandButton button2 = new RibbonCommandButton(row); button2.Text = "测试SmallBtn1"; MenuMacro menuMac2 = macGroup.CreateMenuMacro("Button2_Macro", "^C^CButton2_Command ", "Button2_Tag", "Button2_Help", MacroType.Any, "RibbonImages//test16.png", "RibbonImages//test32.png", "Button2_Label_Id"); button2.MacroID = menuMac2.ElementID;//ID不能少 button2.ButtonStyle = RibbonButtonStyle.SmallWithText; button2.KeyTip = "Button2 Key Tip"; button2.TooltipTitle = "Button2 Tooltip Title!"; row.Items.Add((Autodesk.AutoCAD.Customization.RibbonItem)button2); RibbonCommandButton button3 = new RibbonCommandButton(row); button3.Text = "测试LargeBtn3"; MenuMacro menuMac3 = macGroup.CreateMenuMacro("Button3_Macro", "^C^CButton3_Command ", "Button3_Tag", "Button3_Help", MacroType.Any, "RibbonImages//test16.png", "RibbonImages//test32.png", "Button3_Label_Id"); button3.MacroID = menuMac3.ElementID; button3.ButtonStyle = RibbonButtonStyle.LargeWithText; button3.KeyTip = "Button3 Key Tip"; button3.TooltipTitle = "Button3 Tooltip Title!"; row.Items.Add((Autodesk.AutoCAD.Customization.RibbonItem)button3); cs.Save(); Application.ReloadAllMenus();//重加载所有的按钮 ed.WriteMessage("Add buttons successed!"); }
最后,效果和第一篇最后的效果是一样的哦!~
相关文章推荐
- Platinum SDK 使用 NDK 编译
- 模板生成系统
- 合约机该不该就此消失 成为运营商的历史
- 排序方法1
- C#之数组(排序)
- 如果不能时刻保持学习的心态,那么你将被 IT 甩回开普乐星去
- Android Studio——Android中对MIME类型的理解
- Android 之json解析
- 初识RMAN5:清除RMAN所有配置
- Hibernate核心原理解析
- Java重命名文件
- C++日志操作开源函数库之Google-glog
- 记录Bug,引出问题《二》
- redis学习笔记---redis主从复制
- php单例模式学习
- 跟我一起写 Makefile(四)
- HDU 5598:GTW likes czf 敲了一天的数位DP
- Linux bit 操作
- Linux概念架构的理解(转)
- Windows注意目录