武園園,孫文磊,何 麗
WU Yuan-yuan,SUN Wen-lei,HE Li
(新疆大學 機械工程學院,烏魯木齊 830047)
隨著市場競爭的日趨激烈以及網絡技術的不斷完善,企業間對制造業信息的需求不斷的加大。與此同時,網絡零件庫系統誕生了,并受到廣泛關注。單機版的零件庫系統已經無法滿足現代企業的需求,只有基于異構CAD平臺的網絡零件庫可以為企業用戶提供更多的資源[1]。要完成網絡零件庫系統主要功能的開發,主要是通過軟件的二次開發來實現。目前,很多三維軟件都提供了二次開發接口。如Inventor、UG NX、CATIA等。Inventor軟件具有良好的開放型,它提供了充分的二次資源開發接口和開發方法,用戶可以在其平臺上開發滿足自己特定要求的產品[2]。
因此,本文通過研究Inventor二次開發,實現了Web-3D零件庫系統中零件模型的可視化、零件模型的參數提取以及在線參數化驅動等功能。整個過程以Visual Studio 2008作為主要開發工具。
Inventor軟件提供了強大的二次開發接口—Inventor API。Inventor API(Application Programming Interface)的技術基礎是微軟的自動化技術。用戶通過Inventor API,可以直接使用OLE Automation技術實現Inventor的二次開發[3]。因此,可以用支持OLE Automation技術的各種高級語言來控制Inventor的各種對象與相關屬性等,例如Visual Basic、Visual C++、C#、Java等。在Inventor Professional 2012中,提供了三種API開發途徑:Add-In、獨立的EXE(Standalone EXE)和Apprentice Server[4]。為了實現在不打開軟件的模式下,對Inventor進行二次開發,該系統采用獨立的EXE開發模式。直接通過編程來實現零件庫系統的相關功能。
同時,Inventor API是一種以面向對象的方式提供應用程序對象功能的應用程序接口。它提供了Inventor的各種對象的內在功能,并且各個對象間是一種相互繼承的關系[5]。
對于Inventor2012,Inventor API for.NET提供了多個DLL文件。在進行Inventor的二次開發時,只需要在.NET平臺下引用Autodesk.Inventor.Interop.dll文件,獲取對Inventor根對象Application的訪問權,利用C#語言以面向對象的方式編寫應用程序,通過調用函數來實現對Inventor各種操作,如打開/關閉三維零件模型文件、導出wrl文件與零件參數化驅動等。
為了提高零件庫系統的運行速度,Inventor二次開發采用不啟動軟件的模式,同時用戶無需安裝軟件就可以實現對Inventor零件模型的相關操作。
系統中Inventor二次開發的具體過程如圖1所示。首先引入COM庫類型文件(Autodesk Inventor Object Library),初始化COM庫;其次,運用C#調用函數調用庫中的根對象Application,建立與Inventor的通信;然后,通過C#函數調用相關的對象、屬性或者方法來實現。

圖1 Inventor二次開發流程
web零件庫系統中,零件模型的可視化、參數化設計、三維模型的上傳與下載及在線動態連接數據庫等功能都涉及到Inventor二次開發技術,具體的功能流程如圖2所示。

圖2 零件庫系統中的功能流程圖
零件庫系統一般用于存儲大量零部件模型及相關數據信息,其構建形式不外乎兩種:其一,使用三維CAD軟件為大量型號的零部件模型建模,將所有模型存儲于數據庫中;其二,利用CAD軟件的參數化建模方法,按照模型模板+參數系列的方法存儲數據[6]。對比這兩種構建零件庫的方法可得知,使用前一種方法構建的系統訪問速度快,但其數據量過于龐大,數據冗余較多,同時建庫工作量大,不易于維護。而后一種方法減小了服務器中的數據量,在系統維護及建庫工作量方面都比前一種方法有很大的優勢。
因此,零件庫系統采用了“模型模板+參數列表”的形式構建系統模型數據庫,用戶所需模型由在線調用Inventor二次開發接口而生成。同時,為了減少數據庫的存儲量,并滿足用戶的特殊要求,系統提供了在線參數化驅動功能。用戶瀏覽零件模型時,如果需要不同尺寸的零件模型,可以在現有模板參數的基礎上修改參數,系統則自動生成相應尺寸的模型,并導出wrl文件,儲存在臨時文件夾里,顯示在頁面上,供用戶瀏覽/下載[7]。
零件庫系統實現參數化驅動大致需要以下三個步驟:首先,用戶在瀏覽模型及參數時,根據自己的需求在系統的要求范圍內修改模型文件的原始參數,并將修改后的參數提交給服務器;然后,服務器利用Inventor接口函數啟動應用程序,調用庫中的模型文件和用戶修改后的參數值,更新原始模型文件,導出wrl文件,存儲在臨時文件夾里,完成零件的在線參數化驅動;最后,服務端將更新后的新零件模型的wrl文件更新到客戶端供用戶瀏覽,而存于服務端臨時文件里的模型文件則供用戶下載。實現參數化驅動的關鍵代碼如下:

綜合考慮Inventor在線參數化驅動過程的實現,若將實現相應功能的共性操作提取出來,按照統一的格式進行定義,然后將其封裝為一個公共的接口,這樣不僅可以保證對Inventor軟件操作的一致性,而且能夠屏蔽掉對Inventor軟件的二次開發接口的具體實現過程[8]。因此,對Inventor進行二次開發,將常用功能按照面向對象編程的方法進行封裝是系統開發過程中重要的過程。
Inventor二次開發中實現相應功能的操作大致包括:打開/關閉模版文件、提取與修改參數、導出wrl文件、Inventor軟件是否啟動調整等。將其操作按照統一的格式進行定義,然后將其封裝為一公共的接口。Inventor二次開發接口封裝類庫派生關系如圖3所示。具體步驟如下:
首先,引入Inventor軟件的類型庫(Autodesk Inventor Object Library);
其次,根據COM接口對OLE組件自動化技術的支持,C#編程通過CreateInstance方法獲得Application對象;
通過C#編程,完成相應的功能操作。
最后,把公共接口以類庫的形式封裝起來,在系統應用程序中添加引用該類庫。
通過以上對Inventor二次開發接口的封裝,不僅避免了參數化實現過程的繁瑣與重復,而且使得系統本身的邏輯更加清楚,維護與升級工作更為容易。

圖3 Inventor二次開發接口封裝
零件庫后臺管理系統上傳頁面如圖4所示。三維零件模型可以按照節點進行分類上傳。上傳過程中,應用程序自動讀取模型的參數等信息,導出wrl文件,并將兩者存放在數據庫中。

圖4 后臺管理系統上傳頁面
系統中模型的可視化以及在線參數化驅動的實現頁面如圖5所示。在該頁面中,用戶可以進行三維模型文件瀏覽,瀏覽模型驅動參數,以及進行在線參數化驅動,生成用戶需要的三維CAD模型,供用戶下載。

圖5 在線參數化頁面
本文通過深入研究C#編程,并以Inventor二次開發技術為核心,論述了Inventor二次開發在Web-3D零件庫系統中的應用。文中詳細論述了Web-3D零件庫系統中零件模型的參數化設計與接口的封裝等功能的實現方法與過程,實現了給用戶提供一個共享Inventor資源平臺的理想。基于零件庫系統,用戶可以下載現有的或者參數化驅動后的模型等資源后,直接用于自己的設計等工作,從而提高企業及其它用戶的工作效率。
[1]鐘佩思,欒倩,劉梅,王景林,辛紀光.面向網絡化資源共享的零件庫系統研究與實現[J].機械設計與制造,2010,2(2):249-251.
[2]吳衛衛,喬領干,張愛梅.基于Inventor的二次開發中引出序號添加方法的研究[J].制造業自動化,2013,35(1):73-76.
[3]陳伯雄,張朝陽.InventorR6VB(A)陳谷設計[M].機械工業出版社,2004.
[4]令狐克志,王轉,程國全.Inventor API在貨架參數化三維造型中的應用[J].機械工程與自動化,2005,(1):26-29.
[5]董濤,張宇,李勃,李果.Inventor二次開發在高低壓開關設備參數化造型中的應用[J].機械與電子,2009(4):34-36.
[6]何麗,孫文磊,王宏偉.基于UG的Web三維零件庫系統開發[J].機床與液壓,2012,40(11):91-94.
[7]王宏偉,孫文磊,何麗.AJAX技術在Web零件庫系統中的應用研究[J].制造業自動化,2011,33(12):107-110.
[8]何麗,孫文磊,王宏偉.異構CAD平臺網絡零件庫系統的研究與實現[J].機械設計與制造,2012(2):266-268.