AutoCAD中.Net实现打开程序自动加载菜单栏的方法
背景
在用.net做CAD经典模式菜单栏功能的时候想要实现打开CAD自动加载,于是经过查阅相关文档和代码运行测试,发现可以通过实现IExtensionApplication接口的方式达到这个目的。
相关文档说明
- 当AutoCAD装载一个托管程序时,它查询程序的装配件
(assembly)是否有ExtensionApplication自定义特性性。如果它找到这个特性,AutoCAD把这个特性所联系的类型作为程序的入口点。如果没有找到这个特性,AutoCAD查找所有实现IExtensionApplication接口的输出类。如果没有找到相关的接口实现,AutoCAD就会跳过程序的初始化步骤。 ExtensionApplication特性只能被附加到一个类型。这个被附加的类型必须实现IExtensionApplication接口。
代码
这里重要的是实现IExtensionApplication接口,并重写接口的初始化方法和终止方法,以创建一个简单菜单栏并实现自动加载为例体现该解决路径。
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Runtime;
using CadApplication;[assembly: ExtensionApplication(typeof(AcadNetApp))] //启动时加载工具栏,注意typeof括号里的类库名
namespace CadApplication
{//实现接口public class AcadNetApp : IExtensionApplication{//重写接口里的初始化方法public void Initialize(){//加载后初始化的程序放在这里 这样程序一加载DLL文件就会执行var doc = Application.DocumentManager.MdiActiveDocument;doc.Editor.WriteMessage("\n加载程序中...\n");//加载菜单栏AddMenu(doc);}//创建菜单栏public void AddMenu(Document doc){if (Application.AcadApplication is AcadApplication cadApp){var addinMenu = cadApp.MenuGroups.Item(0).Menus.Add("XXX工具");//命令“DWGTools”后面需要加空格,来代替手动空格,命令逻辑代码这里不进一步展开。addinMenu.AddMenuItem(addinMenu.Count, "XXX功能", "DWGTools ");var isShown = false;foreach (AcadPopupMenu menu in cadApp.MenuBar){if (menu.Name == addinMenu.Name){isShown = true;break;}}if (!isShown){addinMenu.InsertInMenuBar(cadApp.MenuBar.Count);}}}//重写接口的终止方法public void Terminate(){//清理程序,可空}}
}
作者:RegalZ
根据个人学习经验撰写,如有错误,敬请指正。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
