通过IExtensionApplication接口控制AutoCAD的启动,如果把createRibbon()直接加入到Initialize里,在Microsoft visual studio 2015调试时可以成功,但是通过acad2015doc.lsp加载dll时失败,通过添加事件的方式使用lsp方式加载可是成功但调试失败。关系如下表:
实现方式 | VS中调试 | LSP方式加载 |
Initialize()加方法 | true | false |
Initialize()加事件 | false | true |
【代码如下:】
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
声明:版权所有,如要转载请注明出处。