前言:在实际项目开发中,我们总会遇到一些问题。比如说在CAD打开之前,修改注册表的内容,或者解决CAD在没有完全加载想要的dll情况下,功能运行报错的bug。因此,下面和大家介绍一下IExtensionApplication接口
IExtensionApplication接口
namespace Autodesk.AutoCAD.Runtime
{
public interface IExtensionApplication
{
void Initialize();
void Terminate();
}
}
Initialize()
在插件载入时,先运行当前方法
Terminate()
在CAD关闭的时候,运行当前方法
因此我们可以继承这个结构,实现我们自己想定义的方法
使用案例(一)自动运行Ribbon的命令
创建Ribbon方法
具体可以查看上一篇博客,这里就不继续赘述了
public class RibbonCmd
{
[CommandMethod("RibbonCmd")]
public void Ribbon()
{
...定义按钮代码
}
}
定义IExtensionApplication接口类
public class App : IExtensionApplication
{
public void Initialize()
{
Document acdDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
acdDoc.SendStringToExecute("RibbonCmd\n", true, false, false);
}
public void Terminate()
{
}
}
这里需要注意的点是,方法后面一定加 “\n” 模拟点击enter键,这样子才能运行命令
使用案例(二)自动加载dll
背景
经常在使用一些自己定义的dll文件,或者公用比较多的类库时。总会出现自己想要的dll没有给CAD自动加载进来,这样子我们需要手动去添加对应的dll到CAD的运行环境下,以避免出来未找到相关程序的bug
定义IExtensionApplication接口类
public class App : IExtensionApplication
{
public void Initialize()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
AssemblyName assemblyName = new AssemblyName(args.Name);
string filePath = Path.Combine(Path.GetDirectoryName(typeof(App).Assembly.Location), string.Format("{0}.dll", assemblyName.Name));
return File.Exists(filePath) ? Assembly.LoadFrom(filePath) : null;
}
public void Terminate()
{
}
}
AssemblyResolve事件
当对某个程序集解析失败的时候,运行当前事件。
因此,相关dll加载出错时,会进来当前命令中,指定相关路径再加载一次dll文件
最后
上面只是简单的介绍两种常使用的方法,还有很多广阔的领域可供大家去探索。也可以在这边注入一些服务,修改CAD系统的一些操作。大致的分享就到这里了,大家多多点赞多多支持~~~