栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

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

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/911254.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号