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
根据个人学习经验撰写,如有错误,敬请指正。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值