autocad Ribbon创建的一种新思路
之前开发的功能相对简单,
一个RibbonTab就把相关的功能展示出来了。
目前着手准备开发的功能,
需要多个RibbonTab,
且不想显示AutoCAD或Civil 3D自身的RibbonTab,
曾经想模拟3d3s的样子来切换RibbonTab,
但发现3d3s是将AutoCAD原生的Cuix和自己的RibbonTab结合到一起,
对于纯的AutoCAD,
这样做没什么问题,
但对于Civil 3D、map 3D或者Architecture,
这样做就有问题了,
加载3d3s后显示的是AutoCAD与3d3s的RibbonTab,
.....
后来发现软件原生的RibbonTab与自己定制RibbonTab的切换,
完全可以通过切换工作空间来实现。
加载到AutoCAD的情况
加载到Civil 3D的情况
对于数量不多的RibbonButton,
使用代码直接创建,
代码量不多,
编写和修改问题都不大,
但当RibbonButton数量很多时,
编写和修改代码就很困难了,
于是想借助Cuix文件来实现。
如果直接加载Cuix文件,
这些自定义的RibbonTab将会出现在所有的工作空间中,
所以不能采用简单的方式直接加载Cuix文件,
于是就有了这篇文章的新思路:
——读取Cuix文件“动态”创建RibbonTab。
读取Cuix文件使用的API是Autodesk.AutoCAD.Customization命名空间下的,
“动态”创建使用的API则是Autodesk.Windows和Autodesk.AutoCAD.Ribbon下的。
——中心思想就是将Autodesk.AutoCAD.Customization下的对象转换为Autodesk.Windows下的对象。
下面是代码片段:
using cuix = Autodesk.AutoCAD.Customization; using Autodesk.Windows; CustomizationSection cs = new CustomizationSection( Path.GetDirectoryName( Uri.UnescapeDataString( new UriBuilder( Assembly.GetExecutingAssembly().CodeBase).Path)) + "\\工业总图三维设计.cuix", true); Autodesk.Windows.RibbonControl ribbonCtrol = ComponentManager.Ribbon; if (ribbonCtrol != null) { foreach (cuix.RibbonTabSource rts in cs.MenuGroup.RibbonRoot.RibbonTabSources) { RibbonTab rtab = ribbonCtrol.FindTab(rts.ElementID); if (rtab == null) { rtab = new RibbonTab(); rtab.Title = rts.Name; rtab.Id = rts.ElementID; ribbonCtrol.Tabs.Add(rtab); CreatePanels(rtab, rts); }
这样做的好处是:
当重启AutoCAD后,
自己的RibbonTab不再出现,
不会残留在主Cuix文件中。
当然,
工作空间也是在代码中动态创建的,
在AutoCAD正常退出的过程中,
也会将其删除。
目前完成的代码中只涉及到了简单的RibbonCommandButton、RibbonSplitButton相对简单的按钮,
没有涉及到RibbonTextBox等复杂的按钮。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?