吳志林,張凱還
((南京理工大學(xué)機(jī)械工程學(xué)院,江蘇南京210094)
Solidworks是一套完全基于windows的三維設(shè)計(jì)軟件,它具有強(qiáng)大的零件建模、零部件裝配、工程圖輸出功能,支持OLE(對(duì)象鏈接與嵌入)技術(shù)與COM(組件對(duì)象模型)技術(shù),設(shè)計(jì)者能夠根據(jù)自身需要對(duì)其進(jìn)行二次開發(fā)。通過(guò)Solidworks提供的API(應(yīng)用編程接口),可以開發(fā)嵌入式模塊以擴(kuò)充原Solidworks的功能,形成客戶化定制的Solidworks軟件系統(tǒng)。
在進(jìn)行齒輪、彈丸等具有特殊輪廓的零件建模時(shí),Solidworks現(xiàn)有模塊無(wú)法滿足用戶需求,而Solidworks三維實(shí)體零件特征量的輸出,如質(zhì)量、質(zhì)心、轉(zhuǎn)動(dòng)慣量等參數(shù)對(duì)后續(xù)的產(chǎn)品設(shè)計(jì)有很大影響,因此,開發(fā)出能夠在Solidworks中精確繪制任意工程函數(shù)曲線的功能非常必要。傳統(tǒng)的二次開發(fā)只針對(duì)某一領(lǐng)域的特殊情況,不具備普遍性,本文以Solidworks自帶VBA為開發(fā)工具,論述了在Solidworks中繪制任意一元函數(shù)曲線的思想與方法,該方法可以解決在Solidworks中繪制齒輪、凸輪、拋物線等復(fù)雜輪廓時(shí)遇到的難題,具有重要的現(xiàn)實(shí)意義。
Solidworks增值開發(fā)主要通過(guò)其內(nèi)嵌的SolidworksAPI接口進(jìn)行,API提供了大量的OLE對(duì)象及對(duì)象的屬性和方法,利用這些OLE對(duì)象,幾乎可以實(shí)現(xiàn)所有模型創(chuàng)建的開發(fā)。任何支持OLE技術(shù)的高級(jí)語(yǔ)言如Delphi,C,C++,Visual C++,VBA,Visual basic 等都可作為開發(fā)工具[1]。用戶可以根據(jù)自己的需要編寫生成DLL文件,作為插件掛在Solidworks菜單之中,也可以添加到工具條中,甚至可以生成單獨(dú)的可執(zhí)行文件調(diào)用Solidworks軟件。
Solidworks API對(duì)象是一個(gè)自上而下的多層次的樹形網(wǎng)絡(luò)。如圖1所示[2],Sldworks是根目錄對(duì)象,位于應(yīng)用程序的底層,是訪問(wèn)Solidworks API所有對(duì)象的入口程序。接口對(duì)Solidworks API的調(diào)用實(shí)行逐級(jí)尋訪,先調(diào)用能實(shí)現(xiàn)所需功能對(duì)象的父對(duì)象,然后調(diào)用與父對(duì)象相關(guān)的子對(duì)象,如果子對(duì)象所封裝的屬性和方法不能實(shí)現(xiàn)所需要的功能,則繼續(xù)調(diào)用該子對(duì)象的下級(jí)子對(duì)象,如此逐級(jí)遍歷,直到結(jié)束[3]。So1idworks API父對(duì)象與子對(duì)象是包含關(guān)系,不是繼承關(guān)系,父對(duì)象包含子對(duì)象的屬性和方法,子對(duì)象自身不帶有該屬性和方法。二次開發(fā)中,如果沒(méi)有按規(guī)則進(jìn)行API逐級(jí)調(diào)用,將無(wú)法實(shí)現(xiàn)所需功能。
圖1
在Solidworks提供的所有對(duì)象中,絕大多數(shù)二次開發(fā)要用到Modeldoc對(duì)象,零件草圖創(chuàng)建、尺寸標(biāo)注、三維零件生成、特征管理、裝配體零部件添加、配合關(guān)系添加、草圖生成、工程圖標(biāo)注等的二次開發(fā),都需要調(diào)用到該對(duì)象的子對(duì)象。主要用到了Modeldoc對(duì)象的子對(duì)象Partdoc(零件對(duì)象)以及Partdoc的不同子對(duì)象,只有正確的選用開發(fā)對(duì)象并實(shí)現(xiàn)逐級(jí)調(diào)用,才能實(shí)現(xiàn)預(yù)期的開發(fā)目的。
草圖繪制是Solidworks三維模型創(chuàng)建的第一步,草圖輪廓的每一段在Solidworks中都可以用函數(shù)表示,只要精確的做出草圖輪廓,就可以實(shí)現(xiàn)零件的精確建模。Solidworks沒(méi)有繪制漸開線、拋物線等復(fù)雜曲線的功能,可以通過(guò)選擇足夠多的樣點(diǎn),以繪制樣條曲線命令CreateSpline依次連接,近似生成所需要的函數(shù)曲線,并有相當(dāng)高的精度。
當(dāng)需要繪制一元函數(shù)曲線輪廓時(shí),為用戶提供曲線表達(dá)式輸入、曲線段選擇窗口,并根據(jù)精度要求選擇取樣步長(zhǎng)。通過(guò)編程實(shí)現(xiàn)表達(dá)式字符串的讀取,還原函數(shù)方程并處理得出曲線導(dǎo)數(shù)方程,按照取樣步長(zhǎng)計(jì)算取樣點(diǎn)值,參照曲線段前段輪廓及特定點(diǎn)導(dǎo)數(shù)方程值,將樣點(diǎn)做相應(yīng)旋轉(zhuǎn)和移動(dòng),即可方便精確的做出所需曲線。
以繪制弧形部為拋物線的彈丸為例,如圖2所示,在Solidworks中繪制彈丸零件草圖時(shí),習(xí)慣將彈丸圓柱部母線DE平行于水平軸。取拋物線AB段作為彈丸弧形部,為減小彈丸飛行阻力,將A、B兩點(diǎn)中曲率半徑較大的點(diǎn)(A點(diǎn))與圓柱部結(jié)束點(diǎn)(E點(diǎn))重合并使圓柱部與弧形部相切。設(shè)選用弧形部曲線為y=ax2+bx+c(xB≤x≤xA),做點(diǎn)A切線與水平軸交于C點(diǎn),夾角為θ。將AB弧繞原點(diǎn)O逆時(shí)針旋轉(zhuǎn)π-θ到達(dá)A1B1,此時(shí)A1點(diǎn)切線A1C1必然與圓柱部母線DE平行,AB弧上任意一點(diǎn)F旋轉(zhuǎn)后的坐標(biāo)(xF1,yF1)為:
圖2 彈丸拋物線圖
最后將旋轉(zhuǎn)后各點(diǎn)沿水平軸正向移動(dòng)xE-xF1,沿豎直軸正向移動(dòng)yE-yF1,即可使A1點(diǎn)與E點(diǎn)重合,再用樣條線依次連接取樣點(diǎn)即可使曲線弧與圓弧部相切,得到所需拋物線。
如上所述,在繪制草圖時(shí)只需關(guān)心所需要的輪廓形狀,而無(wú)需在Solidworks繪制出的曲線位置上耗費(fèi)精力,在繪制其他零件時(shí),用戶只需根據(jù)實(shí)際需要對(duì)旋轉(zhuǎn)角度做一選擇即可達(dá)到作圖目的。
1)建立曲線函數(shù)輸入界面,見圖3。
圖3
2)函數(shù)字符串處理。首先利用VBA內(nèi)部字符串函數(shù) Right,Mid,Instr,Val等讀取系數(shù)、變量、符號(hào)位置并存儲(chǔ)于數(shù)組,然后將函數(shù)還原并計(jì)算得出函數(shù)導(dǎo)數(shù)方程。部分語(yǔ)句如下:
3)運(yùn)用CreateSpline命令繪制目標(biāo)曲線,部分程序如下[2]:
4)將編制程序制作成按鈕并置于草圖繪制工具條中,方便使用。
見圖3程序運(yùn)行界面及運(yùn)行結(jié)果。
以在Solidworks中繪制任意一元函數(shù)曲線為開發(fā)目的,介紹了在Solidworks中繪制任意一元函數(shù)曲線的思想與方法,利用VBA編程、以繪制弧形部為拋物線的彈丸為例,演示了該方法在產(chǎn)品設(shè)計(jì)中的應(yīng)用。對(duì)本文所述方法稍做改動(dòng),即可實(shí)現(xiàn)繪制任意工程函數(shù)曲線的目的,為諸如繪制任意形狀齒輪等模型提供極具意義的參考。
[1]徐國(guó)權(quán),黃志超.基于SolidWorks的參數(shù)化設(shè)計(jì)二次開發(fā)研究[J].機(jī)械設(shè)計(jì)與研究,2007,23(1),68~70.
[2]Solidworks公司.Solidworks API二次開發(fā)[M].北京:機(jī)械工業(yè)出版社,2005.
[3]呂曉燕,賈海英,張曉鐘.基于VB對(duì)SolidWorks二次開發(fā)方法的研究[J].機(jī)械設(shè)計(jì)與制造,2005(3),114 ~116.
[4]丁彩虹.SolidWorks中函數(shù)曲線繪制的二次開發(fā)[J].機(jī)械與電子,2006,(7),79~80.