999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

COM 技術在Autodesk Inventor 二次開發中的應用

2012-07-25 07:16:58校月軍
微型電腦應用 2012年10期
關鍵詞:二次開發用戶功能

校月軍

0 引言

Inventor 二次開發有 3種方式:Add-In, EXE和 VBA Macro[1]。Add-In和VBA Macro都是進程內加載運行;EXE方式,是在進程外,通過創建 Inventor進程并獲取其Application訪問Inventor對象,或者通過Inventor Apprentice將Inventor的一些功能模塊加載到自己的進程中運行,但該方式下的API集要小一些[2]。他們各有自己的優缺點,可以根據需要自己選擇。

1 Inventor 二次開發的簡介

Add-In的優點,是直接將自己的功能完全嵌入到Inventor當中,可以完全訪問Inventor的所有API,該方式對于用戶,具有較高透明性,用戶可以控制其加載和卸載。Add-In可以獨立發布,單獨制作安裝包;其缺點是需要較多的時間來開發。同時,Add-In分為兩種:Application Add-In和Translator Add-In。Translator Add-In是專門針對其他CAD文件和Inventor文件之間格式轉換而設計的Add-In 框架。而Application Add-In 可以歸結為其他的一般的Add-In。兩者間的啟動方式和入口不大一樣,Translator Add-In一般設計為打開某個特定文件時才會加載該 Add-In模塊,而Application Add-In 一般是隨著Inventor的啟動或者打開第一個Add-In所支持的文檔時加載(2012才有的Delay loading的功能)。本文著重介紹Application Add-In。

EXE方式由于只能訪問部分Inventor API,故其主要是將Inventor的部分功能,集成到自己的應用中。例如安裝包里的TaskScheduler工具,其主要是利用Inventor對Inventor文件進行簡單的操作; Exe還可以通過 Apprentice集成Inventor的功能,Apprentice 類似于一個沒有UI的Inventor的內核,API也相對少一些。Apprentice的優點,是不需要啟動 Inventor進程就能對 Inventor文檔進行操作,缺點是API沒有Inventor API豐富。

VBA Macro是Inventor自帶的VBA開發環境,啟動Inventor后,就能通過直接編寫 VBA代碼來訪問所有Inventor的API,調試也相對簡單,能夠查看Inventor 對象里的各個變量值。不需要學習復雜的高級編程語言,開發簡單、快速、適用于做原型論證(Prototype);但其缺點是代碼是暴露給所有用戶,用戶需要在Inventor VBA環境中加載VBA macro的工程,運行其代碼。

2 Inventor Add-In 的開發實踐及相關技術

2.1 準備工作

Inventor作為整個二次開發的平臺,必須在機器上安裝Autodesk的Inventor產品,同時需要安裝類似Visual Studio之類的軟件開發工具及組件。因為 Inventor Add-In本身是COM組件,所以,該開發工具需要具備COM組件開發的功能。

2.2 具體實踐

本文的例子是基于Inventor 2012平臺之上,采用的開發語言是C++,開發工具是VC++ 2008。如果你的Inventor和 Visual Studio版本較低,仍然也可以按照本文的步驟操作,實現一個Add-In (部分2011 和2012版本上的才有的新功能除外) 。

2.2.1 創建與加載新的Add-In

在裝有Inventor產品的機器上,可以看到以下路徑中含有eveloperTools.msi 和UserTools.msi兩個安裝包:

Win7:C:UsersPublicDocumentsAutodeskInventor 2012SDK

WinXP:C:Program FilesAutodeskInventor 2010SDK

其中,DevelopTools.MSI安裝后會生成5個文件夾:Docs下放的是一些Add-In開發的指導文檔,其中包括API結構圖;Include下是為C++開發環境準備的頭文件庫;Reference下方的是 Inventor用來讀寫注冊表的模塊;Sample下一些二次開發的實例;Tools下有一些二次開發相關的有用的工具,比如Event Watcher 就是一個查看Inventor事件的很好的工具;Wizard下的 InventorWizards.msi 是 Visual Studio環境中的一個Inventor Add-In模板安裝包,安裝完畢后,你的VS環境中就會有一個名字叫Autodesk Inventor AddIn模板(包括VB和C#[3]:

選擇該模板,創建一個新的項目,命名為“MyInventorAddIn”, 下一步到“Add-In Type & Settings”頁面:Project Type可選為Application Add-In in a regular dll 或者Translator Add-In in a regular dll。Details里面的name是Add-In的啟動類,description為該Add-In的描述,我把他們都設置為MyInventorAddInServer和This is my first Add-In,下一步直到結束。

配置好項目環境后編譯該工程,如果遇到 fatal error LNK1000,修改工程屬性 Build Event>Post Build Event>command line, 指定正確的目的文件夾,本例的正確路徑為"C:ProgramDataAutodeskInventor 2012Addins”),成功后,啟動Inventor.exe,點擊按鈕Tools>Add-Ins,啟動Add-In Manager窗口,可以看到的Add-In已經在Add-Ins列表中。

2.3 技術詳解

2.3.1 Solution文件結構說明與講解:

該目錄結構由模板自動生成,主要具有以下文件,如圖1所示:

圖1 Solution文件組成

MyInventorAddInServer.cpp:定義了該 Add-In的入口(即加載點);

MyInventorAddIn.idl:定義了該COM對象相關的信息,定義在coclass前的classID(即uuid)一般作為Add-In的唯一標識,Inventor根據這個ID來創建Add-In的COM對象,從而根據預定義的接口來加載Add-In模塊;

MyInventorAddIn.X.manifest:(開始于2011版本)定義了該COM對象的manifest文件,用于支持side-by-side的功能,其文件結構(.addin)為:

Inventor 2011引入了一種新的Add-In注冊方式:.addin方式。在之前的版本,Inventor Add-In的信息是通過AddInServer的DllRegisterServer(…)函數將Add-In信息以COM注冊的方式寫在注冊表當中的,Inventor會去遍歷出這些信息,創建Add-In對象并且加載。2011開始,Inventor也會遍歷預定義的Add-In文件夾,遍歷所有的.addin文件,從而獲取 Add-In的必要信息。可能需要說明的是中的Add-In啟動模塊可以帶有絕對路徑,如果不指定路徑,則默認為Inventor Bin目錄。

三個重要函數:

該函數是Add-In的入口函數,該Add-In的COM對象一旦被創建出來,Inventor就會Query該方法,參數FirstTime值由Inventor給出,表明該Add-In是否為第一次初始化,一般是指Inventor安裝后的第一次加載該Add-In模塊。 類CMyInventorAddInServer繼承于模板類 CApplication AddInServerImpl,該基類持有指向InventorApplication的指針m_pApplication,通過該指針你可以訪問Inventor的API庫,從而操作Inventor對象。

OnDeactivate()方法會在該Add-In模塊被unload的情況下被調用。最后才會被清理的對象或指針一般放在這里釋放。

Inventor 不僅可以暴露自己的API,同樣也支持用戶設計的Add-In API,用戶可以通過該函數將Add-In Server的對象暴露出去,用戶可用通過Inventor API取到Add-In的handle,從而操作其暴露的函數。

此時的Add-In雖然已經可以被Inventor識別和加載,但沒有實現任何功能,如何添加功能,將在下面介紹。

2.3.2 Add-In的Framework

Add-In的功能,除了自己的邏輯之外,很大的一部分模塊是用來和Inventor 交互的,由于Inventor的API對于所有的Add-In來講都是一樣的,所以就有可能存在統一或者類似的 Add-In framework,不管你使用的是哪種,都會有下面幾個重要的元素:Interface,command和request。本文結合例子SamplesVC++AddInsCustomCommand來研究Add-In的模型以及其是如何工作的。

Interface是指Inventor UI上的Add-In的command命令,在該實例中,由基類CCommand提供的CreateButton (…) 方法生成新的 ButtonDefinition,在 ButtonDefinition的OnActivate方法中可以創建一個新的 command,

當按鈕被用戶點擊后,該Command即被激活,對應的ButtonDefinition就會收到Inventor的OnExecute事件,在該事件中,可以初始化Add-In的對話框,可以為模態也可以為非模態,同時啟動 Interaction事件,該事件可以通過OnPreselect,OnSelect,OnUnselect等方法,幫你選擇你需要的操作對象,比如說平面或者圓弧之類,這些數據將作為該command的輸入數據。

當所有必需的輸入數據都準備好后,該command就可以調用對應的 request類執行該 command,request主要由ChangeProcessor對象來扮演,所有的 request通過ChangeProcessor執行后將會自動合成為一個事務操作,自動支持undo和redo。ChangeProcessor同時支持Inventor的Transcript腳本, 實現自動化測試:OnReadFromScript從script中恢復輸入數據,包括 Inventor的對象;OnWritetoScript將所有的輸入數據寫入到script中存儲。

2.4 Add-In的調試

Inventor能夠成功加載Add-In,調試也就相當簡單。首先確定.AddIn文件中指定的AddInServer dll所指向的是編譯生成的dll,然后用Visual Studio 打開該工程文件,選擇AddInServer所在的Dll,右鍵中選擇“設置為啟動項目(Set as startup Project)”,然后再次右鍵,選擇屬性 (Property) > 調試 (Debugging) > 命令(command), 輸入Inventor.exe的全路徑,F5(start debugging)。設置斷點,然后Inventor運行到該斷點時,將會自動觸發。

另一種方式是采用 Visual Studio 中的 Attach Inventor.exe的方式。

2.5 Add-In的部署

Add-In的部署和一般軟件的部署一樣,只要將所需的文件安裝正確的目錄即可,如果還是通過寫注冊表的方式來注冊,Add-In,Inventor內部的Add-In通常是采用另外編寫一個exe程序,對所有需要register的dll進行注冊和反注冊,由安裝包在安裝時執行該exe程序,完成注冊過程,卸載是執行反注冊過程。

3 結論

CAD軟件的二次開發,一直以來都是一個比較活躍的話題,各個平臺間的二次開發,也有著較大的差別,本文研究和實踐了Inventor Add-In的一些基本知識和技術。同時,隨著新技術的不斷出現,Add-In的開發,也在不斷融入新的內容,如:

(1)多核CPU要求Add-In及其平臺能夠具有多任務處理的能力。

(2)通過云計算將Add-In的功能模塊引入云端。

(3)移動平臺的迅速發展,也要求Add-In能夠具備較好的跨平臺能力。

[1]Brian Ekins, Taking the Step from VBA Macros to Autodesk Inventor Add-Ins,[M]Autodesk University 2009

[2]Brian Ekins, Upgrading your Autodesk Inventor Add-Ins to Use the New Ribbon User Interface,[M]Autodesk University 2009

[3]Rajeev Lochan C.G, Develop Autodesk Inventor Addin using C#, 2008.9

猜你喜歡
二次開發用戶功能
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
淺談基于Revit平臺的二次開發
甘肅科技(2020年20期)2020-04-13 00:30:02
淺談Mastercam后處理器的二次開發
模具制造(2019年3期)2019-06-06 02:11:02
西門子Easy Screen對倒棱機床界面二次開發
關于非首都功能疏解的幾點思考
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
如何獲取一億海外用戶
創業家(2015年5期)2015-02-27 07:53:25
中西醫結合治療甲狀腺功能亢進癥31例
主站蜘蛛池模板: 91午夜福利在线观看精品| 国产在线八区| 精品久久777| 国产高潮流白浆视频| 91精品人妻一区二区| 欧洲亚洲欧美国产日本高清| 国产成人精品男人的天堂下载| 亚洲无码精彩视频在线观看| 女人18毛片一级毛片在线 | 欧美午夜久久| 91麻豆精品视频| 无码人妻免费| 成人午夜网址| 99国产精品免费观看视频| 色哟哟色院91精品网站| 无码国产伊人| 先锋资源久久| 丰满的熟女一区二区三区l| 韩日免费小视频| 国产丰满大乳无码免费播放 | 亚洲第一视频免费在线| 免费国产黄线在线观看| 97se亚洲综合不卡 | 亚洲av成人无码网站在线观看| 91久久夜色精品国产网站 | 欧美精品导航| 九九热精品在线视频| 国产成人综合在线视频| 国产精品无码翘臀在线看纯欲| 国产亚洲精品自在线| 精品欧美视频| 成人小视频在线观看免费| 国产精品视频a| 老色鬼久久亚洲AV综合| 午夜综合网| 国产一级二级在线观看| 国产成人凹凸视频在线| 欧美色99| 国产一区二区三区免费| 色综合a怡红院怡红院首页| 伊人久久精品亚洲午夜| 精品亚洲麻豆1区2区3区| 国产99视频精品免费观看9e| 亚洲成人免费看| 在线亚洲小视频| 青青草原国产| 日韩美毛片| 国产区在线观看视频| 丝袜无码一区二区三区| 天天躁狠狠躁| 亚洲色图欧美激情| 国产视频大全| 毛片免费在线视频| 国产日本欧美亚洲精品视| 综合色天天| 日本三区视频| 91福利一区二区三区| 91色在线视频| 久草国产在线观看| 91色在线视频| 中国成人在线视频| 久久动漫精品| 国产福利拍拍拍| 成人福利视频网| 在线中文字幕网| 欧美色99| 免费看美女毛片| 久久精品人妻中文系列| 久久国产高清视频| 午夜人性色福利无码视频在线观看| 亚洲欧美成人在线视频| 四虎成人精品在永久免费| 久久综合九九亚洲一区| 人人爽人人爽人人片| 精品国产一二三区| 国产丝袜无码精品| 国产精品中文免费福利| 久久这里只有精品66| 亚洲系列中文字幕一区二区| 九九香蕉视频| 欧美另类第一页| 久久精品无码一区二区国产区|