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