順德大良網(wǎng)站建設(shè)開發(fā)海南百度推廣seo
前言:在實際項目開發(fā)中,我們總會遇到一些問題。比如說在CAD打開之前,修改注冊表的內(nèi)容,或者解決CAD在沒有完全加載想要的dll情況下,功能運行報錯的bug。因此,下面和大家介紹一下IExtensionApplication接口
IExtensionApplication接口
namespace Autodesk.AutoCAD.Runtime
{public interface IExtensionApplication{void Initialize();void Terminate();}
}
Initialize()
在插件載入時,先運行當(dāng)前方法
Terminate()
在CAD關(guān)閉的時候,運行當(dāng)前方法
因此我們可以繼承這個結(jié)構(gòu),實現(xiàn)我們自己想定義的方法
使用案例(一)自動運行Ribbon的命令
創(chuàng)建Ribbon方法
具體可以查看上一篇博客,這里就不繼續(xù)贅述了
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
背景
經(jīng)常在使用一些自己定義的dll文件,或者公用比較多的類庫時??倳霈F(xiàn)自己想要的dll沒有給CAD自動加載進來,這樣子我們需要手動去添加對應(yīng)的dll到CAD的運行環(huán)境下,以避免出來未找到相關(guān)程序的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事件
當(dāng)對某個程序集解析失敗的時候,運行當(dāng)前事件。
因此,相關(guān)dll加載出錯時,會進來當(dāng)前命令中,指定相關(guān)路徑再加載一次dll文件
最后
上面只是簡單的介紹兩種常使用的方法,還有很多廣闊的領(lǐng)域可供大家去探索。也可以在這邊注入一些服務(wù),修改CAD系統(tǒng)的一些操作。大致的分享就到這里了,大家多多點贊多多支持~~~