当前位置: 首页 > news >正文

CAD二次开发 插件初始化接口IExtensionApplication

前言:在实际项目开发中,我们总会遇到一些问题。比如说在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系统的一些操作。大致的分享就到这里了,大家多多点赞多多支持~~~

http://www.lryc.cn/news/12429.html

相关文章:

  • kafka-11-kafka的监控工具和常用配置参数
  • 前端PWA渐进式加载技术
  • 【ubuntu 22.04不识别ch340串口】
  • 解决:eclipse绿化版Resource注解报Resource cannot be resolved to a type问题
  • 初识Cookie和Session
  • vue3的七种路由守卫使用
  • 华测导航GPCHC协议ROS驱动包,CGI610、410接收机,NavSatStatus、GPSFix和普通格式
  • 算法实战应用案例精讲-【图像处理】Pillow图像处理(python代码实战)
  • C语言通讯录【动态+文件】
  • Linux驱动开发详细解析
  • Java Character 类,超详细整理,适合新手入门
  • Python量化入门:关于收益率的一些概念
  • 微搭使用笔记(三) 数据模型介绍及初步使用
  • JavaScript刷LeetCode心得
  • 浙江工商大学2023年硕士研究生 入学考试初试成绩查询通知及说明
  • 华为OD机试题 - 子序列长度(JavaScript)
  • Simulink 自动代码生成电机控制:STM32 Encoder编码器使用总结
  • 《计算机系统基础》——计算机系统导论
  • 华为OD机试 - 获取最大软件版本号(JavaScript) | 机试题算法思路 【2023】
  • python--pygame实现各级菜单栏目设置
  • C++Primer15.3节练习
  • 解决实际项目中stalled时间过久的问题
  • vim编辑器
  • Python 使用 pip 安装 matplotlib 模块(秒解版)
  • python-openCV—入门到精通系列讲解(配效果图)- 总览
  • 智能小车红外避障原理
  • (三十六)Vue解决Ajax跨域问题
  • 【CSAPP】整数表示
  • Python基础2
  • 【项目立项管理】