上一篇相关文章主要借助了cuix配置文件来制作插件按钮,但是对于纯码农来说还是喜欢以代码来说话,今天这篇文章就来讲讲纯代码添加按钮。

开发IDE:VS2010

环境:.Net Framework4.0

AutoCAD版本:2014中/EN

今天介绍的代码主要借助的是AcCui.dll这个动态链接库,因为在我的了解中,CAD的开发库中有很多类似的类,又没有相关的介绍API的文档(你不是专业人员真是心累~),都是自己尝试或者在AutoDesk社区中找到的相关内容。

下面先说说思路,再添加核心代码,如果你有需要,欢迎关注我或者联系我,我很愿意与你共享资源与共同学习进步

1.首先还是要找到相关的主cuix文件,就是AutoCAD二次开发三种添加插件按钮的方法之一中介绍的acad.cuix文件(我觉得添加图片排版太不方便了,所以尽量减少图片~);

                //获取到ACAD.cuixCustomizationSection 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");//ElementIDif (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!");}

最后,效果和第一篇最后的效果是一样的哦!~

AutoCAD二次开发三种添加插件按钮的方法之二相关推荐

  1. AutoCAD二次开发三种添加插件按钮的方法

    在上一篇关于AutoCAD的文章中,我将很多关于CAD的博客相关资源进行了说明,这一篇文章我将介绍如何在AutoCAD中的ribbon中添加相应的按钮.就是下面这种按钮: PS:在开发中我们最好使用中 ...

  2. AutoCAD二次开发三种添加插件按钮的方法之一

    在上一篇关于AutoCAD的文章中,我将很多关于CAD的博客相关资源进行了说明,这一篇文章我将介绍如何在AutoCAD中的ribbon中添加相应的按钮.就是下面这种按钮: PS:在开发中我们最好使用中 ...

  3. Android Studio 三种添加插件的方式,androidstudio

    前几篇blog我们介绍了如何安装和配置Android Studio,这篇Blog我们来聊聊如何给Android Studio添加插件,添加插件的路径有三种,我把他们分类如下: 点击设置小按钮 点击[P ...

  4. ubuntu三种添加环境变量的方法

    第一种临时设置,用 export 指令,如在$PATH中增加JAVA文件夹: $export PATH=$PATH:/usr/local/lib/jdk1.6.0_25 二:用于当前用户: 在用户主目 ...

  5. Kong Dashboard系列【三】添加插件----rate-limiting

    Kong Dashboard系列[三]添加插件----rate-limiting 为service-route-test1添加限流插件,使其在一分钟之内只能被请求10次 验证 当请求次数到达第11次时 ...

  6. CCF-CSP 201903-2二十四点 三种方法 满分题解 结尾附惊天方法

    CCF-CSP 201903-2二十四点 三种方法 满分题解 结尾附惊天方法 题目链接:CCF-CSP 201903-2二十四点 方法一思路: 1.通读题意,发现该表达式仅由4个数字和3个四则运算组成 ...

  7. 软件工程习题,耦合性的概念如何与软件可移植性相关联?举例支持你的论述,应用逐步求精法为下列程序开发三种不同级别的过程抽象

    软件工程习题 11.9.耦合性的概念如何与软件可移植性相关联?举例支持你的论述 11.10.应用逐步求精法为下列程序开发三种不同级别的过程抽象,开发一个支票打印程序,给出输出金额,并按支票常规要求给出 ...

  8. NX二次开发-UFUN装配添加组件UF_ASSEM_add_part_to_assembly

    NX二次开发-UFUN装配添加组件UF_ASSEM_add_part_to_assembly NX11+VS2013#include <uf.h> #include <uf_part ...

  9. 三种录制接口脚本的方法

    三种录制接口脚本的方法 在做接口测试没有接口文档的情况下,就可以使用录制脚本的方法来录制接口测试的脚本.jmeter本身就支持录制脚本,但是还有两种另外的工具也可以录制脚本. 因为我懒得自己做截图,所 ...

最新文章

  1. RocketMQ实战--大数据平台技术栈06
  2. 技巧:Silverlight应用程序中如何获取ASP.NET页面参数
  3. 【机器视觉】Qt集成Halcon开发环境详解(二)
  4. C语言typedef小结1(转载自百度百科)
  5. [转]Sublime Text 2 C++编译运行简单配置
  6. 剑指offer39 平衡二叉树
  7. 若依微服务如何设置令牌有效期?
  8. lua面向对象是怎么实现的
  9. ubuntu14.04 设置静态ip
  10. 5.支付平台架构:业务、规划、设计与实现 --- 账务系统
  11. php多线程实现抓取,php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
  12. Anaconda版本选择 Python3.6版本的Anaconda下载
  13. HDP 03.FreeIPA安装
  14. 自学linux驱动从入门到放弃(四)配置rk3288开发板与ubuntu18.04的IP地址
  15. 2022 manjaro安装中文输入法
  16. TypeError: strptime() takes no keyword arguments ValueError(“‘%s‘ is a bad directive in format ‘%s‘“
  17. 如何更新R以及RStudio
  18. zzulioj1094c语言版答案,ZZULIOJ 1094: 统计元音(函数专题)
  19. 洛谷——P3906 Geodetic集合
  20. 自学车载以太网笔记(2)

热门文章

  1. 人到了32岁就有自己的工作方法了吗
  2. 公益 | 亚马逊全球公益项目首次落地中国,向贫困地区捐赠80万元“温暖爱心包”...
  3. 【智能优化算法-蝠鲼优化算法】基于蝠鲼优化算法求解多目标优化问题附matlab代码
  4. 用计算机弹seve,使用shell写简单的计算机
  5. C#中ManagementClass获取本机信息
  6. 公示!第三批6款产品方案入围2023年度智驾竞争力评选
  7. 犬类收容所人员将7只小狗当狗妈妈面摔死
  8. api 和 implementation的不同点
  9. 1.1.9 Python集合
  10. 在盛大文学的叛逃追杀令之下,腾讯撑创世中文网撑得有点暧昧