C#基于Autocad的二次开发(10.项目启动-菜单和命令)

开始之前确保已完成步骤1创建解决方案和类库项目,并在对应项目中安装nuget包

经过之前几步的项目基础设施搭建以及Autocad部分操作的实现,现在我们启动项目,并且通过C#代码动态创建Autocad的菜单,并且将菜单和自定义Autocad命令进行绑定

ACD.Client项目中创建类文件PluginStart.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[assembly: ExtensionApplication(typeof(ACD.Client.PluginStart))]
namespace ACD.Client
{
internal class PluginStart : IExtensionApplication
{
public async void Initialize()
{
//获取CAD应用程序
AcadApplication app = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as AcadApplication;
for (int i = 0; i < app.MenuGroups.Item(0).Menus.Count; i++)
{
var name = app.MenuGroups.Item(0).Menus.Item(i).Name;
if (name == "ACDesignBackground") //判断菜单是否已存在,如果存在则不再创建
return;
}
//添加根菜单
AcadPopupMenu pmParnet = app.MenuGroups.Item(0).Menus.Add("ACDesignBackground");

pmParnet.AddMenuItem(pmParnet.Count + 1, "ACDesignStart ", "ACDesignStart ");
pmParnet.AddMenuItem(pmParnet.Count + 1, "ACDesignStop ", "ACDesignStop ");

//将创建的菜单加入到CAD的菜单中
pmParnet.InsertInMenuBar(app.MenuBar.Count + 1);

//服务注册
await AppInit.Init();
}

public void Terminate()
{
AppInit.BackgroundJobServers?.Dispose();
}
}
}

ACD.Client项目中创建类文件Commands.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using ACDApplication = Autodesk.AutoCAD.ApplicationServices.Core.Application;

[assembly: CommandClass(typeof(ACD.Client.Commands))]
namespace ACD.Client
{
internal class Commands
{
[CommandMethod("ACDesignStart", CommandFlags.Modal)]
public void ACDesignStart()
{
var hangfire = AppInit.Resolve<IHangfireService>();

hangfire.AddOrUpdate(() => Console.WriteLine("Hello"), "*/2 * * * * * ", TimeZoneInfo.Local);

var lines = new List<LinkLineParam>
{
new LinkLineParam
{
DimPosition=100,
EndPoint= new ACDPoint3D(100,100,0),
StartPoint=new ACDPoint3D(200,200,0),
LineType = Domain.LineType.DimensionLine,
LayerName="尺寸线层"
},
new LinkLineParam
{
DimPosition=100,
EndPoint= new ACDPoint3D(300,100,0),
StartPoint=new ACDPoint3D(500,200,0),
LineType = Domain.LineType.BlockLinkLine,
LayerName="center"
}
};

var logger = AppInit.Resolve<IloggerService>();
logger.Info("Hello");

//当前工作文档
Document document = ACDApplication.DocumentManager.MdiActiveDocument;
//绘制线条
ACDOperation.Instance.LinkLine(document.Database,lines);
}

[CommandMethod("ACDesignStop", CommandFlags.Modal)]
public void ACDesignStop()
{
AppInit.BackgroundJobServers?.Dispose();
}
}
}

选中ACD.Client项目文件,右键打开属性窗体,在调试中将启动操作的启动外部程序选中,浏览文件选中Autocad 安装目录中的exe文件,例如:F:\AutoCad\Application\AutoCAD 2023\acad.exe
图片

调试运行ACD.Client项目时,F:\AutoCad\Application\AutoCAD 2023\acad.exe执行程序会同时启动,autocad启动后,打开或新建文件,在当前文件的工作文档中输入命令”netload”加载ACD.Client.dll
图片

ACD.Client.dll加载后,程序进入PluginStart.Initialize()方法中,这时会通过代码创建自定义菜单,通过点击相应的菜单执行不同的命令并进入该命令绑定的方法中,例如点击菜单ACDesignStart进入到Commands.ACDesignStart()方法
图片


C#基于Autocad的二次开发(10.项目启动-菜单和命令)
https://wangyuangen.github.io/2024/05/20/CsharpAutocad10/
作者
Yuangen Wang
发布于
2024年5月20日
许可协议