倪洪啟, 何崇玉, 孟憲春
(1.沈陽(yáng)化工大學(xué) 機(jī)械與動(dòng)力工程學(xué)院,沈陽(yáng) 110142;2.秦皇島北方管業(yè)有限公司 河北省波紋膨脹節(jié)與金屬軟管技術(shù)創(chuàng)新中心,河北 秦皇島 066004)
隨著智能制造的興起,CAD/CAM的運(yùn)用也越來(lái)越廣泛。作為一款基于Windows開(kāi)發(fā)的CAD軟件,SolidWorks軟件的市場(chǎng)占有率非常高。SolidWorks軟件提供應(yīng)用程序接口(Application Programming Interface,API)函數(shù)庫(kù),可供用戶進(jìn)行二次開(kāi)發(fā)[1]。開(kāi)發(fā)人員通過(guò)該軟件進(jìn)行開(kāi)發(fā)時(shí)只需要調(diào)用SolidWorks API函數(shù)就可以對(duì)圖形進(jìn)行參數(shù)化,無(wú)需編寫(xiě)復(fù)雜的基本繪圖函數(shù)。同時(shí),該軟件自帶宏工具[2],通過(guò)宏錄制就可以快速獲取開(kāi)發(fā)人員所需要的庫(kù)函數(shù)。因此可以提高軟件的開(kāi)發(fā)效率,縮短開(kāi)發(fā)周期。
目前,基于SolidWorks平臺(tái)的二次開(kāi)發(fā)主要有2種方法[3]:第一種是使用SoildWorks自帶的庫(kù)函數(shù),通過(guò)調(diào)用庫(kù)函數(shù),生成草圖,再進(jìn)行特征操作,完成整個(gè)零件圖的創(chuàng)建;第二種方法是參數(shù)化的方法,該方法和第一種方法類(lèi)似,不同的是創(chuàng)建零件的具體尺寸未在代碼中直接給定,而是用形參來(lái)代替。程序運(yùn)行時(shí),用戶可以手動(dòng)輸入尺寸的大小,生成自己所需要的模型。
在實(shí)際通過(guò)SolidWorks平臺(tái)進(jìn)行二次開(kāi)發(fā)時(shí),會(huì)存在對(duì)象捕捉導(dǎo)致系統(tǒng)錯(cuò)誤捕捉和微小尺寸無(wú)法生成的問(wèn)題?;谝陨?種情況,會(huì)導(dǎo)致復(fù)雜草圖生成錯(cuò)誤或者生成草圖不準(zhǔn)確。本文基于VB.Net對(duì)SolidWorks進(jìn)行二次開(kāi)發(fā),分析開(kāi)發(fā)過(guò)程中的問(wèn)題,并提出一些解決方法。
SoildWorks二次開(kāi)發(fā)中草圖繪制失敗主要有兩方面的原因:一方面是對(duì)象捕捉的影響,開(kāi)啟對(duì)象捕捉后,系統(tǒng)錯(cuò)誤的捕捉導(dǎo)致繪制失?。涣硪环矫媸抢L制的線條過(guò)小,模型草圖的尺寸很小時(shí),微小尺寸無(wú)法通過(guò)SolidWorks API的庫(kù)函數(shù)生成。
SolidWorks中自帶了幾何關(guān)系/捕捉這個(gè)功能,用戶在使用SolidWorks進(jìn)行繪制草圖時(shí),軟件會(huì)自動(dòng)捕捉草圖中的端點(diǎn)、中點(diǎn)、相切、垂直等幾何關(guān)系,方便設(shè)計(jì)人員草圖的繪制[4]。但是,在通過(guò)調(diào)用庫(kù)函數(shù)對(duì)SolidWorks進(jìn)行二次開(kāi)發(fā)時(shí),軟件無(wú)法通過(guò)庫(kù)函數(shù)知道線與線之間的約束關(guān)系,會(huì)自動(dòng)給繪制的草圖增加一些錯(cuò)誤的約束,正因?yàn)檫@些錯(cuò)誤的約束,導(dǎo)致草圖繪制錯(cuò)誤。
如圖1所示,打開(kāi)對(duì)象捕捉后,在繪制球閥草圖時(shí),由于兩端點(diǎn)之間距離過(guò)小,系統(tǒng)自動(dòng)將兩根線的端點(diǎn)連接在一起,關(guān)閉對(duì)象捕捉后,則可以成功繪制草圖。但是,關(guān)閉對(duì)象捕捉后,生成的看似閉合的草圖之間會(huì)存在縫隙,無(wú)法生成閉合草圖,因此無(wú)法對(duì)草圖進(jìn)行特征操作。
圖1 球閥手柄草圖
關(guān)閉對(duì)象捕捉產(chǎn)生間隙的原因主要是數(shù)據(jù)類(lèi)型導(dǎo)致的,通過(guò)VB.Net進(jìn)行編程時(shí),一般變量數(shù)據(jù)類(lèi)型都設(shè)為單精度型(Single)或雙精度(Double)型。無(wú)論單精度還是雙精度在儲(chǔ)存中都分為符號(hào)位、指數(shù)位和尾數(shù)部分等3個(gè)部分[5]。這種結(jié)構(gòu)是一種科學(xué)計(jì)數(shù)法,把一個(gè)浮點(diǎn)數(shù)表示為尾數(shù)乘以2的指數(shù)次方再添加符號(hào)[6]。但有些小數(shù)無(wú)法完整地用二進(jìn)制來(lái)表示,從而在儲(chǔ)存時(shí)可能有誤差。
在通過(guò)SolidWorks平臺(tái)經(jīng)用底層API繪制草圖時(shí),如果繪制的直線長(zhǎng)度小于2 mm時(shí)或者圓弧夾角小于2°時(shí),這段直線或圓弧將不會(huì)生成。
在通過(guò)API函數(shù)進(jìn)行開(kāi)發(fā)時(shí),所用的單位都是以米為單位[7],但在SolidWorks操作時(shí)所用的一般都以毫米為單位[8]。在繪制微小尺寸時(shí),本就微小的尺寸在縮小1000倍后變得更小,系統(tǒng)誤認(rèn)為繪制直線的兩點(diǎn)坐標(biāo)一致,導(dǎo)致微小尺寸無(wú)法生成。
針對(duì)以上2個(gè)問(wèn)題,本文中總共給出了3種方法,即取消對(duì)象捕捉、增加幾何約束和一種新提出的“剪切法”。每種方法有其不同的適用情景,在使用各個(gè)方法時(shí),開(kāi)發(fā)人員需要根據(jù)實(shí)際情況選擇合適的解決方法。
SolidWorks自帶的對(duì)象捕捉的功能會(huì)影響草圖的繪制,可以通過(guò)關(guān)閉草圖對(duì)象捕捉功來(lái)解決問(wèn)題。此方法繪制的草圖雖然可以通過(guò)SolidWorks中的修復(fù)草圖命令進(jìn)行修復(fù),但在SolidWorks API中暫時(shí)還沒(méi)有修復(fù)草圖的命令,因此,一般情況下關(guān)閉對(duì)象捕捉法主要用于直接繪制閉合圖形的情況,例如繪制矩形、圓形、鍵槽等。
圖2所示的水泵開(kāi)關(guān)指示燈草圖。開(kāi)啟對(duì)象捕捉后,繪制一系列圓時(shí),有些圓會(huì)自動(dòng)與相鄰的圓施加相切約束,導(dǎo)致繪制不正確。關(guān)閉對(duì)象捕捉后,草圖生成成功,而且繪制的圖形是封閉圖形,不會(huì)影響后續(xù)的特征生成。
圖2 水泵開(kāi)關(guān)指示燈草圖
在實(shí)際使用過(guò)程中,我們一般都是先獲取原用戶對(duì)象捕捉設(shè)置,再關(guān)閉對(duì)象捕捉,進(jìn)行草圖繪制,繪制結(jié)束后再恢復(fù)原用戶設(shè)置,這樣可以避免運(yùn)行代碼時(shí)修改用戶原始的SolidWorks設(shè)置。其中VB.Net代碼如下:
SolidWorks的Api中的庫(kù)函數(shù)可以對(duì)草圖進(jìn)行尺寸標(biāo)注、修改尺寸和施加各種約束,通過(guò)各種約束條件把草圖進(jìn)行完全約束,可以繪制出合格的草圖。在基于VB.Net的SolidWorks二次開(kāi)發(fā)中,添約束的庫(kù)函數(shù)為[9]:
Part.SketchAddConstraints( IdStr As String ),其中約束類(lèi)型主要有以下幾種:在對(duì)草圖進(jìn)行尺寸標(biāo)注時(shí),我們需要先選中需要標(biāo)注的對(duì)象,再進(jìn)行標(biāo)注。庫(kù)函數(shù)[9]如下:
圖3為水泵開(kāi)關(guān)主體的草圖,該草繪中存在多個(gè)細(xì)小尺寸,通過(guò)標(biāo)注尺寸、修改尺寸和添加約束的方法,能夠精確地繪制該草圖。
圖3 水泵開(kāi)關(guān)草圖
用約束法精確繪制草圖時(shí),碰到需要多個(gè)約束才能精確繪制的草繪,需要花費(fèi)大量時(shí)間進(jìn)行約束,會(huì)大大增加開(kāi)發(fā)難度,因此,通過(guò)綜合前2個(gè)方法的優(yōu)點(diǎn),提出了一種名為“剪切法”的新方法?!凹羟蟹ā敝饕抢昧薙olidWorks API中的剪切函數(shù),利用剪切函數(shù)修剪草圖時(shí),可以修復(fù)關(guān)閉對(duì)象捕捉后草圖不封閉的問(wèn)題。方法的主要流程如圖4所示,首先關(guān)閉對(duì)象捕捉,在繪制非閉合曲線時(shí)將線條繪制的長(zhǎng)度大于需要繪制的真實(shí)長(zhǎng)度,然后打開(kāi)對(duì)象捕捉,通過(guò)SolidWorks API中的剪切函數(shù),修剪不需要的線。最后對(duì)草圖進(jìn)行標(biāo)注,使其完全約束。打開(kāi)對(duì)象捕捉后,使用剪切函數(shù)能使交點(diǎn)處的點(diǎn)施加重合約束,解決了無(wú)法生成封閉草圖的問(wèn)題,巧妙地避開(kāi)關(guān)閉對(duì)象捕捉的缺點(diǎn)。此方法中SolidWorks API中的剪切函數(shù)為[9]:
圖4 剪切法操作流程
Part.SketchManager.SketchTrim( Option As String, X As Double, Y As Double , Z As Double)
使用“剪切法”繪制復(fù)雜草圖時(shí),可以通過(guò)很少的代碼就可以得到非常復(fù)雜的草圖,極大地提高了開(kāi)發(fā)效率。
通過(guò)以上對(duì)草圖繪制問(wèn)題的研究,將該研究中的方法運(yùn)用于三片式球閥的三維參數(shù)化設(shè)計(jì)中,同時(shí)也驗(yàn)證了“剪切法”的實(shí)用性。
在對(duì)三片式球閥進(jìn)行參數(shù)化設(shè)計(jì)時(shí),由于球閥手柄特別薄,尺寸比較小,所以繪制時(shí)最為麻煩。圖5為用“剪切法”繪制三片式球閥手柄的截面草圖的流程,首先繪制出大致的草圖,然后使用剪切函數(shù)修剪草圖,成功繪制出手柄的截面草圖,且草圖內(nèi)有陰影。在SolidWorks中草圖有陰影表示為封閉圖形,可以對(duì)草圖進(jìn)行拉伸(Imodel-Doc2:: FeatureExtrusion)、旋轉(zhuǎn)(IModelDoc2:: FeatureRevolve2)、掃描(IModelDoc2:: InsertProtrusionSwept4)、放樣(IModelDoc2:: InsertProtrusionBlend 4)等特征操作[9]。手柄的繪制表明“剪切法”在實(shí)際運(yùn)用時(shí)能夠較好地完成設(shè)計(jì)要求,且使用簡(jiǎn)單。
圖5 三片式球閥手柄草圖繪制流程
在本文開(kāi)發(fā)的三片式球閥的三維參數(shù)化設(shè)計(jì)應(yīng)用程序中,球閥的設(shè)計(jì)準(zhǔn)則與參數(shù)主要參考閥門(mén)設(shè)計(jì)手冊(cè)[10]。并使用Microsoft Access建立關(guān)系數(shù)據(jù)庫(kù)。其中應(yīng)用程序的可視化界面如圖6所示。
圖6 三片式球閥的三維參數(shù)化設(shè)計(jì)可視化界面
應(yīng)用程序中主要零件材料中有3種材料,分別是碳鋼、不銹鋼和鍛鋼。選擇不同材料時(shí),會(huì)根據(jù)選擇的材料調(diào)用Access數(shù)據(jù)庫(kù)自動(dòng)選擇閥門(mén)各部分使用的材料。同樣,修改球閥型號(hào)時(shí),閥門(mén)各部分尺寸也會(huì)自行調(diào)整。在創(chuàng)建完三片式球閥的三維圖后,該程序還可以一鍵導(dǎo)出球閥的BOM表,導(dǎo)出的BOM表為Excel文件,如圖7所示。導(dǎo)出BOM表的VB.Net代碼為:
圖7 三片式球閥BOM表
本文通過(guò)分析SolidWorks二次開(kāi)發(fā)過(guò)程中草圖不精準(zhǔn)的問(wèn)題,提出了3種方法解決了工程實(shí)際問(wèn)題,得出以下結(jié)論:1)利用以上的方法可以提高建模的精確度,極大地減少開(kāi)發(fā)的工作量;2)在繪制復(fù)雜草圖時(shí),提出了“剪切法”,與前兩種方法相比,該方法可以通過(guò)簡(jiǎn)潔的代碼獲得準(zhǔn)確的草圖,為以后二次開(kāi)發(fā)的發(fā)展提供了新的思路;3)本文中提到的方法具有通用性,除了SolidWorks平臺(tái),對(duì)于其他工程軟件的二次開(kāi)發(fā)平臺(tái),例如Pro/E、UG等軟件,也都適用。