开始之前确保已完成步骤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() { 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 ");
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()方法
