程 芬,王宏建,滕 爽
(武漢紡織大學(xué)機(jī)械工程與自動(dòng)化學(xué)院,湖北武漢 430073)
型鋼廣泛應(yīng)用在機(jī)械、建筑、航空航天等領(lǐng)域。在三維建模與設(shè)計(jì)中,一般同一系列的型鋼具有相似的截面形狀,利用三維軟件繪制其截面草圖并調(diào)用拉伸命令即可完成建模。常用型鋼包括:角鋼、槽鋼、T型鋼、H 型鋼和工字鋼等[1]。
SolidWorks(以下簡(jiǎn)稱(chēng)為SW)是一款功能強(qiáng)大的三維實(shí)體造型專(zhuān)用軟件,提供了幾百個(gè)API函數(shù)。這些API函數(shù)是其OLE和COM的接口,使用戶(hù)能直接訪問(wèn)SW,并可利用VB等多種高級(jí)語(yǔ)言對(duì)其進(jìn)行二次開(kāi)發(fā),從而建立適合用戶(hù)需要的專(zhuān)用功能模塊。對(duì)具有類(lèi)似結(jié)構(gòu)的零件進(jìn)行反復(fù)設(shè)計(jì)和修改會(huì)使建模過(guò)程繁瑣,因此對(duì)常用的同類(lèi)型零件建立參數(shù)化設(shè)計(jì)模塊,可實(shí)現(xiàn)零件自動(dòng)建模,從而大大提高設(shè)計(jì)效率[2]。筆者以工字鋼為例,簡(jiǎn)要介紹了基于COM規(guī)范的可生成插件(* .dll)方法的型鋼庫(kù)建立過(guò)程。通過(guò)友好的人機(jī)交互界面,設(shè)計(jì)人員只需輸入相應(yīng)的參數(shù)值就可完成型鋼的建模。
SW二次開(kāi)發(fā)是利用支持OLE和COM編程的開(kāi)發(fā)平臺(tái),通過(guò)調(diào)用SW API函數(shù)來(lái)實(shí)現(xiàn)相應(yīng)功能的開(kāi)發(fā),從而建立專(zhuān)用功能模塊的過(guò)程。
SW API是SW的OLE應(yīng)用程序開(kāi)發(fā)接口,為用戶(hù)提供完全面向?qū)ο蟮念?lèi)體系。它包括對(duì)象的類(lèi)型、屬性和方法。程序員對(duì)網(wǎng)絡(luò)結(jié)構(gòu)中OLE對(duì)象及其方法和屬性進(jìn)行操作,即可實(shí)現(xiàn)不同功能的二次開(kāi)發(fā)。
SW API是一個(gè)自上而下的樹(shù)形層次結(jié)構(gòu),SolidWorks位于所有API中最頂層的位置。由于應(yīng)用程序接口對(duì)SW API訪問(wèn)是逐級(jí)遍歷的,所以任何應(yīng)用程序?qū)PI訪問(wèn)前都必須先經(jīng)過(guò)SolidWorks。SW API囊括了軟件的所有功能。SW二次開(kāi)發(fā)中的參數(shù)化設(shè)計(jì),其本質(zhì)就是正確調(diào)用API對(duì)象的過(guò)程[3]。
目前對(duì)SW軟件進(jìn)行二次開(kāi)發(fā)有兩種方式:一種是基于OLE(對(duì)象的鏈接與嵌入)的自動(dòng)化技術(shù),用戶(hù)程序作為一個(gè)獨(dú)立的應(yīng)用程序(*.exe),通過(guò)API接口調(diào)用SW提供的服務(wù),完成對(duì)它的控制和操作;另一種是基于COM(組件對(duì)象模型)規(guī)范的,即插件形式(Add-Inapplication),用戶(hù)程序作為一個(gè)插件(*.dll)集成到SW中去[4]。本文實(shí)例采用第二種。
使用 Visual Basic.NET創(chuàng)建新的 SolidWorks ADD-In,利用編輯好的宏,編譯ADD-In,并添加引用,添加SolidWorks2010類(lèi)型庫(kù)、常量類(lèi)型庫(kù)等,最后生成ADD-In程序(*.dll)或(*.exe)文件,筆者選擇生成(*.dll)文件。其基本步驟歸納如下:
(1)在SW進(jìn)行零件的三維建模,并對(duì)建模過(guò)程進(jìn)行宏錄制,獲取該零件的VB代碼。
(2)在VB.NET中分析零件設(shè)計(jì)基本參數(shù),對(duì)錄制的宏進(jìn)行修改編輯插入函數(shù)表達(dá)式。
(3)編輯錄制好的宏,刪除冗余的代碼后插入適當(dāng)?shù)拇绑w函數(shù),制作能輸入?yún)?shù)的人機(jī)交互界面。
(4)建立應(yīng)用程序與SW的連接,即在程序中嵌入與SW關(guān)聯(lián)的程序語(yǔ)句。
(5)在VB程序中生成.dll文件。
(6)打開(kāi)SW,加載.dll文件,至此用戶(hù)需要的插件制作完成[5]。
分析工字鋼結(jié)構(gòu)特征,參照相關(guān)設(shè)計(jì)手冊(cè)中工字鋼的標(biāo)準(zhǔn)參數(shù)得到截面二維圖,如圖1所示。打開(kāi)SW開(kāi)始草圖的繪制,并打開(kāi)【工具】/【宏】/【錄制】進(jìn)行宏錄制,選擇前視基準(zhǔn)面為草圖繪制平面,工字鋼截面草圖由直線段和圓角組成,且為軸對(duì)稱(chēng)圖形,繪制中心線并對(duì)繪制好的直線和圓角進(jìn)行鏡像操作,得到完整的工字鋼截面草圖,最后選擇拉伸命令得到工字鋼三維實(shí)體。同時(shí)停止宏錄制,將得到的程序保存為“工字鋼.swp”,以供后續(xù)過(guò)程修改和調(diào)用。
圖1 工字鋼截面參數(shù)
圖中各符號(hào)意義:h為高度;b為腿寬度;d為腰厚度;t為平均腿厚度;r為內(nèi)圓弧半徑;r1為腿端圓弧半徑;C為形心。
(1)繪圖的部分程序代碼如下:
Private Sub Command1_Click()
定義所需的變量
Dim h As Single∥高度h
Dim b As Single∥腿寬度b Dim d As Single∥腰厚度d
Dim t As Single∥平均腿厚度t
…
Dim L As Single∥工字鋼長(zhǎng)度L
Dim swApp As Object∥swapp聲明為對(duì)象,表示SW應(yīng)用程序
Dim Part As Object∥part聲明為對(duì)象,表示SW零件環(huán)境…
開(kāi)始繪圖
Sub main()
Set swApp=Application.SldWorks∥得到 SW 應(yīng)用程序?qū)ο?/p>
Set Part=swApp.ActiveDoc∥當(dāng)前活動(dòng)的工作環(huán)境
boolstatus=Part.Extension.SelectByID2("前視基準(zhǔn)面","PLANE",0,0,0,F(xiàn)alse,0,Nothing,0)
Part.SketchManager.CreateLine(0,0,0,0,b/1000,0)∥繪制直線段
…
Set skSegment=Part.SketchManager.CreateLine(t/1000,b/1000,0,t/1000,b/1000,0)
繪制圓角程序
boolstatus=Part.Extension.SelectByID2("Line5","SKETCHSEGMENT",t/2000,b-d/4000,0,True,0,Nothing,0)
Set skSegment=
Part.SketchManager.CreateFillet(r,1)∥圓角 r
…
Part.SketchManager.InsertSketch True
Part.ShowNamedView2"上下二等角軸測(cè)",8…
boolstatus=Part.Extension.SelectByID2("工字鋼","SKETCH",0,0,0,F(xiàn)alse,0,Nothing,0)
Part.FeatureManager.FeatureExtrusion∥用拉伸函數(shù)得到三維實(shí)體…
(2)利用SW API的功能編制SW插件,部分代碼如下:
API對(duì)象與應(yīng)用標(biāo)志程序
Implements SWPublished.SwAddin
Dim iSldWorks As SldWorks.SldWorks
Dim iCookie As Long
Dim iToolbarID As Long
建立SolidWorks鏈接關(guān)系的關(guān)鍵代碼
SetiSldWorks=ThisSW∥與SW建立連接iCookie=Cookie∥從SW得到cookie
Public Sub AddMenus()∥定義二次開(kāi)發(fā)菜單
iSldWorks.AddMenu swDocPART,"型鋼庫(kù)",5
iSldWorks. AddMenuItem2swDocPART,iCookie," 工字鋼@ 型鋼庫(kù)",-1,"工字鋼設(shè)計(jì)","",""iSldWorks.AddMenuItem2 swDocPART,iCookie,"H型鋼@ 型鋼庫(kù)",-1,"H型鋼設(shè)計(jì)","",""End Sub…
查相關(guān)手冊(cè)可以得出基本參數(shù):h=100,b=68,d=4.5,t=7.6,r=6.5,r1=3.4 即為 10 號(hào)工字鋼截面[6]。拉伸長(zhǎng)度L=200,其插件交互截面如圖2所示。
圖2 工字鋼插件人機(jī)交互界面
在交互式界面下輸入上述參數(shù)得到相應(yīng)工字鋼三維模型如圖3所示。其他型鋼的建模與本例相似,可歸納出同系列的型鋼截面參數(shù)模型,利用簡(jiǎn)單的直線、圓角等繪制命令建立其截面草圖,再利用拉伸命令獲得三維模型。其中錄制的宏代碼中已定義的常數(shù)參量應(yīng)改為所定義的變量,并建立相應(yīng)函數(shù)關(guān)系。程序編寫(xiě)完成后,保存工程并生成工程DLL文件。在SW中點(diǎn)擊【文件】→【打開(kāi)】,文件類(lèi)型選為“Add-Ins(* .dll)”并加載前面生成的DLL文件,至此用戶(hù)需要的插件制作完成[7]。
圖3 工字鋼10三維模型
筆者使用VB語(yǔ)言通過(guò)SolidWorks API函數(shù)接口實(shí)現(xiàn)了型鋼庫(kù)設(shè)計(jì)模塊的二次開(kāi)發(fā)。介紹了基于COM規(guī)范的,將用戶(hù)程序作為插件集成到SW中的方法,實(shí)現(xiàn)了型鋼庫(kù)的建立。該方法只需對(duì)宏代碼進(jìn)行簡(jiǎn)單修改便可實(shí)現(xiàn)預(yù)期的功能,大幅減輕了設(shè)計(jì)人員工作強(qiáng)度,提高了工作效率。
[1] 王智永.基于 SolidWorks型鋼庫(kù)的建立[J].科技資訊,2008(6):67.
[2] 陳克源,王得勝.基于SolidWorks二次開(kāi)發(fā)的支撐腳零件參數(shù)化設(shè)計(jì)[J].機(jī)械研究與應(yīng)用,2011(2):87-89.
[3] 江 洪,魏 崢.SolidWorks二次開(kāi)發(fā)實(shí)例解析[M].北京:機(jī)械工業(yè)出版社,2004.
[4] 江 洪,李仲興,邢啟恩.SolidWorks 2003二次開(kāi)發(fā)基礎(chǔ)與實(shí)例教程[M].北京:電子工業(yè)出版社,2003.
[5] 王 棟.Visual Basic程序開(kāi)發(fā)實(shí)例教程[M].北京:清華大學(xué)出版社,2006.
[6] 秦大同,謝里陽(yáng).現(xiàn)代機(jī)械設(shè)計(jì)手冊(cè)[M].北京:化學(xué)工業(yè)出版社,2011.
[7] 張才忠.基于VB的SolidWorks零件庫(kù)的二次開(kāi)發(fā)[J].現(xiàn)代制造與裝備,2010(2):67-68.