張鵬程,郗艷梅,李國順
(河北工程技術(shù)高等??茖W(xué)校電氣工程系,河北滄州 061001)
利用VB.NET實(shí)現(xiàn)零件虛擬拆裝的動(dòng)態(tài)仿真
張鵬程,郗艷梅,李國順
(河北工程技術(shù)高等??茖W(xué)校電氣工程系,河北滄州 061001)
利用VB.NET作為開發(fā)工具對AutoCAD進(jìn)行了二次開發(fā),實(shí)現(xiàn)了在AutoCAD環(huán)境下的三維零件實(shí)體虛擬拆裝的動(dòng)態(tài)仿真。該方法能夠自動(dòng)完成零件圖的自動(dòng)拆卸和裝配過程的模擬,對于實(shí)際產(chǎn)品設(shè)計(jì)及相關(guān)過程有一定的示范作用。
二次開發(fā);VB.NET;ActiveX Automation技術(shù);動(dòng)態(tài)仿真
裝配仿真[1,2]以動(dòng)畫的方式直觀、形象地模擬裝配過程,從而既可以輔助產(chǎn)品設(shè)計(jì)和裝配工藝的設(shè)計(jì),又可對實(shí)際裝配人員的操作起一定的示范作用。在教學(xué)過程中,應(yīng)用虛擬拆裝動(dòng)態(tài)仿真可以使學(xué)生對于零件的結(jié)構(gòu)、裝配過程、各部件裝配的次序及方法產(chǎn)生清晰認(rèn)識,特別是對于一些大型和復(fù)雜的零件,無法也不可能在課堂上進(jìn)行拆裝演示,所以利用計(jì)算機(jī)實(shí)現(xiàn)零件的虛擬拆裝動(dòng)態(tài)仿真,無論對于實(shí)際生產(chǎn)還是對于課堂教學(xué)都有著非常重用的意義。
自AutoDesk公司開發(fā)的AutoCAD工程圖形處理軟件面世以來,以其完善的繪圖功能,易學(xué)易用的特點(diǎn),受到廣大工程技術(shù)人員的普遍歡迎。AutoCAD及其圖形格式已成為一種事實(shí)上的國際工業(yè)標(biāo)準(zhǔn)[3],其主要是因?yàn)樗哂虚_放的體系結(jié)構(gòu):它允許用戶和開發(fā)者采用高級編程語言對其進(jìn)行擴(kuò)充和修改,即二次開發(fā)[4],能最大限度地滿足用戶的特殊要求。目前,常用的二次開發(fā)工具有AutoLISP,VBA,ObjectARX,VB.NET等。
在Visual Basic 6.0之后,微軟公司推出了全新的“.NET構(gòu)架”,在其第一個(gè)版本Visual Studio.NET 7.0中,集成了Visual Basic 7.0,Visual C++7.0及C#,其中的Visual Basic 7.0(VB 7.0),即是VB.NET的第一個(gè)版本?,F(xiàn)在.NET的最新版本是Visual Studio 2008 SP1,它在Visual Studio 2005的基礎(chǔ)上引入了250多個(gè)新特性,整合了對象、關(guān)系型數(shù)據(jù)、XM L的訪問方式,語言更加簡潔,使開發(fā)Windows應(yīng)用程序更加高效。
ActiveX Automation是微軟公司推出的一個(gè)技術(shù)標(biāo)準(zhǔn)[5,6],該技術(shù)在Windows系統(tǒng)的統(tǒng)一管理下協(xié)調(diào)不同的應(yīng)用程序,允許應(yīng)用程序之間相互控制、相互調(diào)用。
從AutoCAD R14版開始,AutoCAD引入了ActiveX Automation技術(shù)。AutoCAD ActiveX技術(shù)提供了一種機(jī)制,該機(jī)制可使編程者通過編程手段從內(nèi)部或外部來操縱AutoCAD,從而實(shí)現(xiàn)ActiveX與AutoCAD進(jìn)行通信。ActiveX由一系列的對象,根據(jù)它們在AutoCAD中的功能,組成一種樹形結(jié)構(gòu),稱之為對象模型(Object Model)樹。每一個(gè)對象代表了AutoCAD中一個(gè)明確的功能。AutoCAD的絕大多數(shù)功能,均以方法和屬性的方式被封裝在ActiveX對象中,只要使用某種方式,就可以使用各種面向?qū)ο缶幊痰恼Z言對其中的方法、屬性進(jìn)行引用。
首先,要在Visual Basic.NET編程環(huán)境中引用AutoCAD對象庫。在Visual Basic.NET編程環(huán)境中選擇菜單[項(xiàng)目]/[添加引用]/COM,再選擇AutoCAD2004 Tyoe Library,如圖1所示,然后單擊[選擇]和[確定]按鈕。
AutoCAD對象的引用采用對象變量來完成。設(shè)引用AutoCAD應(yīng)用對象(Application)的變量名為AcadApp,則
上面代碼將AutoCAD對象引用賦給變量AcadApp,創(chuàng)建AutoCAD對象變量。如果AutoCAD已經(jīng)啟動(dòng)運(yùn)行,則GetObject函數(shù)返回對AutoCAD應(yīng)用程序?qū)ο蟮囊?否則,發(fā)生一個(gè)錯(cuò)誤。用CreateObject函數(shù)創(chuàng)建AutoCAD應(yīng)用程序?qū)ο蟮囊?如果成功,則AutoCAD被啟動(dòng),否則用MsgBox函數(shù)給出一個(gè)錯(cuò)誤信息提示框,然后退出程序。這里使用了比較復(fù)雜的條件語句,目的是確保只啟動(dòng)運(yùn)行一次AutoCAD。
Visual Basic.NET與AutoCAD連接之后才可以利用AutoCAD對象及其下級對象的屬性、方法等,完成用Visual Basic.NET語言在AutoCAD環(huán)境中的圖形繪制、編輯等操作[8]。
圖1 引用AutoCAD2004的對象庫
AutoCAD圖形的繪制、編輯均在其圖形文件中進(jìn)行,所以,在進(jìn)行動(dòng)態(tài)拆裝仿真之前,首先要利用AutoCAD的繪圖工具,繪制出所有三維零件的實(shí)體圖。本文以平行虎鉗的三維實(shí)體圖為例,保存文件名為“拆裝仿真.dwg”。在應(yīng)用程序中,利用如下代碼打開AutoCAD圖形文件。
然后,在圖形文件中指定要進(jìn)行動(dòng)態(tài)拆裝的各個(gè)零件實(shí)體。實(shí)體的選擇采用如下方法:Acadapp.Active-Document.Utility.GetEntity(Object(Count),basePnt,"選擇實(shí)體")。
利用實(shí)體的Object.handle屬性獲得實(shí)體的handle值,并在當(dāng)前應(yīng)用程序路徑下創(chuàng)建一個(gè)文本文件“選擇實(shí)體.txt”,用以記錄每個(gè)實(shí)體的Handle值。
為了便于觀察拆裝過程,針對每一個(gè)實(shí)體利用Spline工具繪制樣條曲線做為實(shí)體拆裝時(shí)的移動(dòng)路徑。樣條曲線各擬合點(diǎn)的坐標(biāo)由Get FitPoint(i)方法獲得,它們是實(shí)體移動(dòng)位置的關(guān)鍵點(diǎn)。分別按從第一個(gè)點(diǎn)到最后一個(gè)點(diǎn)的順序和從最后一個(gè)點(diǎn)到第一個(gè)點(diǎn)的順序?qū)⒏鲾M合點(diǎn)分別記入標(biāo)志該樣條曲線的兩個(gè)文本文件中,分別保存為“拆卸.txt”和“裝配.txt”中,用來模擬各圖形從初始位置到遠(yuǎn)方(拆卸),從遠(yuǎn)方沿路徑回到初始位置(裝配),從而動(dòng)態(tài)實(shí)現(xiàn)實(shí)體的拆裝過程。然后,將路徑數(shù)存入另一文件,用于在動(dòng)態(tài)模擬時(shí)判斷從屏幕上選擇的圖形實(shí)體數(shù)目是否與路徑數(shù)相等。
利用Acadapp.ActiveDocument.Utility.GetEntity(Obj(ObjCount),basePnt,“選擇實(shí)體”)從CAD中選定樣條曲線;利用ObjpathHandle(ObjpathCount)=Objpath(ObjpathCount).Handle獲得路徑的Handle值。然后將樣條曲線上的擬合點(diǎn)分別寫入“拆卸”和“裝配”文件。具體實(shí)現(xiàn)方法參照實(shí)體的選擇部分。
在選擇圖形及其運(yùn)動(dòng)路徑后,遍歷模型空間,將每個(gè)實(shí)體的Handle值與已經(jīng)存入文件中實(shí)體的Handle值比較,識別該實(shí)體為第幾個(gè)運(yùn)動(dòng)實(shí)體,以便與其相對應(yīng)的路徑相匹配。這里用實(shí)體對象的Handle屬性值而不采用ObjectID屬性值,是因?yàn)樵趫D形文件中,Handle屬性值在對象的生存期內(nèi)始終不變。檢查選擇的零件數(shù)與路徑數(shù)是否相等,根據(jù)第一個(gè)零件圖形到ObjCount零件圖形的順序與數(shù)目與其運(yùn)動(dòng)路徑相同,從已經(jīng)存盤的文件中讀出第i條路徑的各點(diǎn)坐標(biāo),就可以使第i個(gè)零件圖沿該樣條曲線規(guī)定的路徑運(yùn)動(dòng)。
第i個(gè)零件圖形移動(dòng)的語句如下:
Object(i).move(formpoint,toppoint)
其中formpoint與topoint分別為移動(dòng)向量的起點(diǎn)和終點(diǎn)。圖形實(shí)體移動(dòng)是沿著給定向量的移動(dòng),移動(dòng)方向與向量方相相同,移動(dòng)的距離值與向量的模相同。
以平行虎鉗的三維實(shí)體拆裝仿真為例。首先,連接并打開AutoCAD圖形文件,選擇要進(jìn)行拆裝的每個(gè)零件和它們各自的移動(dòng)路徑,如圖2所示。然后單擊拆卸和裝配模擬按鈕,圖象中的各個(gè)零件按Spline曲線軌跡運(yùn)動(dòng),自動(dòng)模擬裝配和拆卸自動(dòng)的過程。圖3為拆卸完成,圖4為裝配正在進(jìn)行過程中,圖5為裝配完成。
圖2 程序運(yùn)行界面及操作窗口
圖3 拆卸完成
圖4 裝配進(jìn)行中
圖5 裝配完成
通過應(yīng)用ActiveX Automation技術(shù)進(jìn)行AutoCAD二次開發(fā),利用ActiveX提供的接口控制和訪問AutoCAD對象,完成應(yīng)用程序和AutoCAD環(huán)境的通信,實(shí)現(xiàn)了零件的動(dòng)態(tài)拆裝仿真。該方法不僅能夠?qū)θS實(shí)體的拆裝活動(dòng)進(jìn)行模擬,而且也可應(yīng)用在二維零件圖的裝配過程中。本例證明,借助AutoCAD強(qiáng)大的圖形處理功能和良好的二次開發(fā)接口,結(jié)合工程實(shí)際問題和專業(yè)特點(diǎn),可以開發(fā)出具有獨(dú)特功能的實(shí)用軟件。而和其他開發(fā)工具相比,利用VB.NET開發(fā)AutoCAD使得整個(gè)開發(fā)過程簡單、迅速而高效。
[1] 李原,張濤,余劍峰.基于操作模型的裝配仿真技術(shù)研究[J].機(jī)械科學(xué)與技術(shù),2000,19(3):503-507.
[2] 姜杉,王玉新,喻宏波.三維實(shí)體機(jī)構(gòu)虛擬裝配及運(yùn)動(dòng)仿真的自動(dòng)化方法[J].天津大學(xué)學(xué)報(bào),2001,34(2):178-182.
[3] 周慧芳.AutoCAD數(shù)據(jù)文件的跨平臺應(yīng)用模式[J].青海師范大學(xué)學(xué)報(bào):自然科學(xué)版,2006,(4):50-53.
[4] 沈剛.CAD軟件二次開發(fā)方法的分析與探討[J].電腦知識與技術(shù),2006,(2):201-203.
[5] 陳春明,霍海波.ActiveX技術(shù)在AutoCAD二次開發(fā)中的應(yīng)用[J].三門峽職業(yè)技術(shù)學(xué)院學(xué)報(bào):綜合版,2006,5(1): 98-99.
[6] 李強(qiáng),何援軍,駱軼殊.基于COM技術(shù)的CAD系統(tǒng)二次開發(fā)能力設(shè)計(jì)[J].計(jì)算機(jī)工程,2001,27(12):147-148.
[7] 陳立新,趙紅梅.基于VB.NET的AutoCAD二次開發(fā)[J].計(jì)算機(jī)應(yīng)用,2006,(6):13-15.
[8] 張晉西.Visual Basic.Net二次開發(fā)AutoCAD范例精解[M].北京:清華大學(xué)出版社,2004.
(責(zé)任編輯:路文梅)
Realizing Dynamic Simulation of Virtual Disassembling and Assembling of Parts with VB.NET
ZHANG Peng-cheng,XI Yan-mei,LI Guo-shun
(Department of Electrical Engineering,Hebei Engineering and Technical College,Cangzhou 061001,China)
Using VB.NET as the secondary development tool for AutoCAD,we have realized the simulating design of disassembling and assembling of the three-dimensional parts in the environment of Auto-CAD.The method can complete the process simulation of part drawing’s disassembling and assembling automatically,and offer a good demonstration effect for the actual process of product design.
secondary development;VB.NET;ActiveX Automation technology;dynamic simulation
T P391.9
A
1008-3782(2010)01-0059-04
2009-09-14
張鵬程(1976-),男,滄州泊頭人,碩士,研究方向:計(jì)算機(jī)輔助設(shè)計(jì)、智能布局。