CAD .Net开发-加载Dll时自动添加Ribbon

通过IExtensionApplication接口控制AutoCAD的启动,如果把createRibbon()直接加入到Initialize里,在Microsoft visual studio 2015调试时可以成功,但是通过acad2015doc.lsp加载dll时失败,通过添加事件的方式使用lsp方式加载可是成功但调试失败。关系如下表:

实现方式VS中调试LSP方式加载
Initialize()加方法truefalse
Initialize()加事件falsetrue

【代码如下:】

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Windows;
using DotNetARX;
using System;


namespace Test
{
    public class Class2 : IExtensionApplication
    {
        void IExtensionApplication.Initialize()
        {
            Autodesk.Windows.ComponentManager.ItemInitialized += ComponentManager_ItemInitialized;
        }

        public void ComponentManager_ItemInitialized(object sender, RibbonItemEventArgs e)
        {
            if (Autodesk.Windows.ComponentManager.Ribbon != null)
            {
                createRibbon();//添加ribbon菜单的函数
                Autodesk.Windows.ComponentManager.ItemInitialized -= ComponentManager_ItemInitialized;
            }
        }

        public static void createRibbon()//生成菜单的代码
        {
            RibbonControl ribbonControl = ComponentManager.Ribbon;//选项卡
            RibbonTab ribbonTab = new RibbonTab() { Title = "隧道通", Id = "Tab1" };
            ribbonControl.Tabs.Add(ribbonTab);
            RibbonPanelSource panelSource = new RibbonPanelSource() { Title = "绘图面板" };
            RibbonPanel ribbonPanel = new RibbonPanel();//面板
            ribbonPanel.Source = panelSource;
            ribbonTab.Panels.Add(ribbonPanel);//面板添加到选项卡
            ribbonTab.IsActive = true;//激活当前菜单
            RibbonButton ribbonButton = new RibbonButton()
            {
                Text = "绘图",
                ShowText = true,
                CommandParameter = "LsArc ",
                CommandHandler = new AdskCommandHandler(),//需要添加引用
            };
            panelSource.Items.Add(ribbonButton);
        }

        public void Terminate() { }
        public class AdskCommandHandler : System.Windows.Input.ICommand
        {
            public bool CanExecute(object parameter)
            {
                return true;
            }

            public event EventHandler CanExecuteChanged;
            public void Execute(object parameter)
            {
                RibbonButton ribBtn = parameter as RibbonButton;//获取发出命令的按钮对象
                if (ribBtn != null || ribBtn.CommandParameter == null)
                    Application.DocumentManager.MdiActiveDocument.SendStringToExecute((string)ribBtn.CommandParameter, true, false, true);
            }
        }
    }
    public class MyCommand
    {
        [CommandMethod("LsArc")]
        public static void LsArc()
        {
            Database db = HostApplicationServices.WorkingDatabase;
            Circle C1 = new Circle(Point3d.Origin, new Vector3d(0, 0, 1),100);
            db.AddToModelSpace(C1);
        }
    }
}

参考:

https://spiderinnet1.typepad.com/blog/2012/04/create-autocad-net-c-addin-in-visual-studio-2010-using-acadnetaddinwizard.html
https://www.cnblogs.com/yantingguo/p/11806506.html
https://www.cnblogs.com/yantingguo/p/11818667.html

声明:版权所有,如要转载请注明出处。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农土木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值