武園園,孫文磊,何 麗
WU Yuan-yuan,SUN Wen-lei,HE Li
(新疆大學(xué) 機(jī)械工程學(xué)院,烏魯木齊 830047)
隨著市場競爭的日趨激烈以及網(wǎng)絡(luò)技術(shù)的不斷完善,企業(yè)間對制造業(yè)信息的需求不斷的加大。與此同時(shí),網(wǎng)絡(luò)零件庫系統(tǒng)誕生了,并受到廣泛關(guān)注。單機(jī)版的零件庫系統(tǒng)已經(jīng)無法滿足現(xiàn)代企業(yè)的需求,只有基于異構(gòu)CAD平臺(tái)的網(wǎng)絡(luò)零件庫可以為企業(yè)用戶提供更多的資源[1]。要完成網(wǎng)絡(luò)零件庫系統(tǒng)主要功能的開發(fā),主要是通過軟件的二次開發(fā)來實(shí)現(xiàn)。目前,很多三維軟件都提供了二次開發(fā)接口。如Inventor、UG NX、CATIA等。Inventor軟件具有良好的開放型,它提供了充分的二次資源開發(fā)接口和開發(fā)方法,用戶可以在其平臺(tái)上開發(fā)滿足自己特定要求的產(chǎn)品[2]。
因此,本文通過研究Inventor二次開發(fā),實(shí)現(xiàn)了Web-3D零件庫系統(tǒng)中零件模型的可視化、零件模型的參數(shù)提取以及在線參數(shù)化驅(qū)動(dòng)等功能。整個(gè)過程以Visual Studio 2008作為主要開發(fā)工具。
Inventor軟件提供了強(qiáng)大的二次開發(fā)接口—Inventor API。Inventor API(Application Programming Interface)的技術(shù)基礎(chǔ)是微軟的自動(dòng)化技術(shù)。用戶通過Inventor API,可以直接使用OLE Automation技術(shù)實(shí)現(xiàn)Inventor的二次開發(fā)[3]。因此,可以用支持OLE Automation技術(shù)的各種高級語言來控制Inventor的各種對象與相關(guān)屬性等,例如Visual Basic、Visual C++、C#、Java等。在Inventor Professional 2012中,提供了三種API開發(fā)途徑:Add-In、獨(dú)立的EXE(Standalone EXE)和Apprentice Server[4]。為了實(shí)現(xiàn)在不打開軟件的模式下,對Inventor進(jìn)行二次開發(fā),該系統(tǒng)采用獨(dú)立的EXE開發(fā)模式。直接通過編程來實(shí)現(xiàn)零件庫系統(tǒng)的相關(guān)功能。
同時(shí),Inventor API是一種以面向?qū)ο蟮姆绞教峁?yīng)用程序?qū)ο蠊δ艿膽?yīng)用程序接口。它提供了Inventor的各種對象的內(nèi)在功能,并且各個(gè)對象間是一種相互繼承的關(guān)系[5]。
對于Inventor2012,Inventor API for.NET提供了多個(gè)DLL文件。在進(jìn)行Inventor的二次開發(fā)時(shí),只需要在.NET平臺(tái)下引用Autodesk.Inventor.Interop.dll文件,獲取對Inventor根對象Application的訪問權(quán),利用C#語言以面向?qū)ο蟮姆绞骄帉憫?yīng)用程序,通過調(diào)用函數(shù)來實(shí)現(xiàn)對Inventor各種操作,如打開/關(guān)閉三維零件模型文件、導(dǎo)出wrl文件與零件參數(shù)化驅(qū)動(dòng)等。
為了提高零件庫系統(tǒng)的運(yùn)行速度,Inventor二次開發(fā)采用不啟動(dòng)軟件的模式,同時(shí)用戶無需安裝軟件就可以實(shí)現(xiàn)對Inventor零件模型的相關(guān)操作。
系統(tǒng)中Inventor二次開發(fā)的具體過程如圖1所示。首先引入COM庫類型文件(Autodesk Inventor Object Library),初始化COM庫;其次,運(yùn)用C#調(diào)用函數(shù)調(diào)用庫中的根對象Application,建立與Inventor的通信;然后,通過C#函數(shù)調(diào)用相關(guān)的對象、屬性或者方法來實(shí)現(xiàn)。
圖1 Inventor二次開發(fā)流程
web零件庫系統(tǒng)中,零件模型的可視化、參數(shù)化設(shè)計(jì)、三維模型的上傳與下載及在線動(dòng)態(tài)連接數(shù)據(jù)庫等功能都涉及到Inventor二次開發(fā)技術(shù),具體的功能流程如圖2所示。
圖2 零件庫系統(tǒng)中的功能流程圖
零件庫系統(tǒng)一般用于存儲(chǔ)大量零部件模型及相關(guān)數(shù)據(jù)信息,其構(gòu)建形式不外乎兩種:其一,使用三維CAD軟件為大量型號(hào)的零部件模型建模,將所有模型存儲(chǔ)于數(shù)據(jù)庫中;其二,利用CAD軟件的參數(shù)化建模方法,按照模型模板+參數(shù)系列的方法存儲(chǔ)數(shù)據(jù)[6]。對比這兩種構(gòu)建零件庫的方法可得知,使用前一種方法構(gòu)建的系統(tǒng)訪問速度快,但其數(shù)據(jù)量過于龐大,數(shù)據(jù)冗余較多,同時(shí)建庫工作量大,不易于維護(hù)。而后一種方法減小了服務(wù)器中的數(shù)據(jù)量,在系統(tǒng)維護(hù)及建庫工作量方面都比前一種方法有很大的優(yōu)勢。
因此,零件庫系統(tǒng)采用了“模型模板+參數(shù)列表”的形式構(gòu)建系統(tǒng)模型數(shù)據(jù)庫,用戶所需模型由在線調(diào)用Inventor二次開發(fā)接口而生成。同時(shí),為了減少數(shù)據(jù)庫的存儲(chǔ)量,并滿足用戶的特殊要求,系統(tǒng)提供了在線參數(shù)化驅(qū)動(dòng)功能。用戶瀏覽零件模型時(shí),如果需要不同尺寸的零件模型,可以在現(xiàn)有模板參數(shù)的基礎(chǔ)上修改參數(shù),系統(tǒng)則自動(dòng)生成相應(yīng)尺寸的模型,并導(dǎo)出wrl文件,儲(chǔ)存在臨時(shí)文件夾里,顯示在頁面上,供用戶瀏覽/下載[7]。
零件庫系統(tǒng)實(shí)現(xiàn)參數(shù)化驅(qū)動(dòng)大致需要以下三個(gè)步驟:首先,用戶在瀏覽模型及參數(shù)時(shí),根據(jù)自己的需求在系統(tǒng)的要求范圍內(nèi)修改模型文件的原始參數(shù),并將修改后的參數(shù)提交給服務(wù)器;然后,服務(wù)器利用Inventor接口函數(shù)啟動(dòng)應(yīng)用程序,調(diào)用庫中的模型文件和用戶修改后的參數(shù)值,更新原始模型文件,導(dǎo)出wrl文件,存儲(chǔ)在臨時(shí)文件夾里,完成零件的在線參數(shù)化驅(qū)動(dòng);最后,服務(wù)端將更新后的新零件模型的wrl文件更新到客戶端供用戶瀏覽,而存于服務(wù)端臨時(shí)文件里的模型文件則供用戶下載。實(shí)現(xiàn)參數(shù)化驅(qū)動(dòng)的關(guān)鍵代碼如下:
綜合考慮Inventor在線參數(shù)化驅(qū)動(dòng)過程的實(shí)現(xiàn),若將實(shí)現(xiàn)相應(yīng)功能的共性操作提取出來,按照統(tǒng)一的格式進(jìn)行定義,然后將其封裝為一個(gè)公共的接口,這樣不僅可以保證對Inventor軟件操作的一致性,而且能夠屏蔽掉對Inventor軟件的二次開發(fā)接口的具體實(shí)現(xiàn)過程[8]。因此,對Inventor進(jìn)行二次開發(fā),將常用功能按照面向?qū)ο缶幊痰姆椒ㄟM(jìn)行封裝是系統(tǒng)開發(fā)過程中重要的過程。
Inventor二次開發(fā)中實(shí)現(xiàn)相應(yīng)功能的操作大致包括:打開/關(guān)閉模版文件、提取與修改參數(shù)、導(dǎo)出wrl文件、Inventor軟件是否啟動(dòng)調(diào)整等。將其操作按照統(tǒng)一的格式進(jìn)行定義,然后將其封裝為一公共的接口。Inventor二次開發(fā)接口封裝類庫派生關(guān)系如圖3所示。具體步驟如下:
首先,引入Inventor軟件的類型庫(Autodesk Inventor Object Library);
其次,根據(jù)COM接口對OLE組件自動(dòng)化技術(shù)的支持,C#編程通過CreateInstance方法獲得Application對象;
通過C#編程,完成相應(yīng)的功能操作。
最后,把公共接口以類庫的形式封裝起來,在系統(tǒng)應(yīng)用程序中添加引用該類庫。
通過以上對Inventor二次開發(fā)接口的封裝,不僅避免了參數(shù)化實(shí)現(xiàn)過程的繁瑣與重復(fù),而且使得系統(tǒng)本身的邏輯更加清楚,維護(hù)與升級工作更為容易。
圖3 Inventor二次開發(fā)接口封裝
零件庫后臺(tái)管理系統(tǒng)上傳頁面如圖4所示。三維零件模型可以按照節(jié)點(diǎn)進(jìn)行分類上傳。上傳過程中,應(yīng)用程序自動(dòng)讀取模型的參數(shù)等信息,導(dǎo)出wrl文件,并將兩者存放在數(shù)據(jù)庫中。
圖4 后臺(tái)管理系統(tǒng)上傳頁面
系統(tǒng)中模型的可視化以及在線參數(shù)化驅(qū)動(dòng)的實(shí)現(xiàn)頁面如圖5所示。在該頁面中,用戶可以進(jìn)行三維模型文件瀏覽,瀏覽模型驅(qū)動(dòng)參數(shù),以及進(jìn)行在線參數(shù)化驅(qū)動(dòng),生成用戶需要的三維CAD模型,供用戶下載。
圖5 在線參數(shù)化頁面
本文通過深入研究C#編程,并以Inventor二次開發(fā)技術(shù)為核心,論述了Inventor二次開發(fā)在Web-3D零件庫系統(tǒng)中的應(yīng)用。文中詳細(xì)論述了Web-3D零件庫系統(tǒng)中零件模型的參數(shù)化設(shè)計(jì)與接口的封裝等功能的實(shí)現(xiàn)方法與過程,實(shí)現(xiàn)了給用戶提供一個(gè)共享Inventor資源平臺(tái)的理想?;诹慵煜到y(tǒng),用戶可以下載現(xiàn)有的或者參數(shù)化驅(qū)動(dòng)后的模型等資源后,直接用于自己的設(shè)計(jì)等工作,從而提高企業(yè)及其它用戶的工作效率。
[1]鐘佩思,欒倩,劉梅,王景林,辛紀(jì)光.面向網(wǎng)絡(luò)化資源共享的零件庫系統(tǒng)研究與實(shí)現(xiàn)[J].機(jī)械設(shè)計(jì)與制造,2010,2(2):249-251.
[2]吳衛(wèi)衛(wèi),喬領(lǐng)干,張愛梅.基于Inventor的二次開發(fā)中引出序號(hào)添加方法的研究[J].制造業(yè)自動(dòng)化,2013,35(1):73-76.
[3]陳伯雄,張朝陽.InventorR6VB(A)陳谷設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2004.
[4]令狐克志,王轉(zhuǎn),程國全.Inventor API在貨架參數(shù)化三維造型中的應(yīng)用[J].機(jī)械工程與自動(dòng)化,2005,(1):26-29.
[5]董濤,張宇,李勃,李果.Inventor二次開發(fā)在高低壓開關(guān)設(shè)備參數(shù)化造型中的應(yīng)用[J].機(jī)械與電子,2009(4):34-36.
[6]何麗,孫文磊,王宏偉.基于UG的Web三維零件庫系統(tǒng)開發(fā)[J].機(jī)床與液壓,2012,40(11):91-94.
[7]王宏偉,孫文磊,何麗.AJAX技術(shù)在Web零件庫系統(tǒng)中的應(yīng)用研究[J].制造業(yè)自動(dòng)化,2011,33(12):107-110.
[8]何麗,孫文磊,王宏偉.異構(gòu)CAD平臺(tái)網(wǎng)絡(luò)零件庫系統(tǒng)的研究與實(shí)現(xiàn)[J].機(jī)械設(shè)計(jì)與制造,2012(2):266-268.