倪洪啟, 何崇玉, 孟憲春
(1.沈陽化工大學 機械與動力工程學院,沈陽 110142;2.秦皇島北方管業有限公司 河北省波紋膨脹節與金屬軟管技術創新中心,河北 秦皇島 066004)
隨著智能制造的興起,CAD/CAM的運用也越來越廣泛。作為一款基于Windows開發的CAD軟件,SolidWorks軟件的市場占有率非常高。SolidWorks軟件提供應用程序接口(Application Programming Interface,API)函數庫,可供用戶進行二次開發[1]。開發人員通過該軟件進行開發時只需要調用SolidWorks API函數就可以對圖形進行參數化,無需編寫復雜的基本繪圖函數。同時,該軟件自帶宏工具[2],通過宏錄制就可以快速獲取開發人員所需要的庫函數。因此可以提高軟件的開發效率,縮短開發周期。
目前,基于SolidWorks平臺的二次開發主要有2種方法[3]:第一種是使用SoildWorks自帶的庫函數,通過調用庫函數,生成草圖,再進行特征操作,完成整個零件圖的創建;第二種方法是參數化的方法,該方法和第一種方法類似,不同的是創建零件的具體尺寸未在代碼中直接給定,而是用形參來代替。程序運行時,用戶可以手動輸入尺寸的大小,生成自己所需要的模型。
在實際通過SolidWorks平臺進行二次開發時,會存在對象捕捉導致系統錯誤捕捉和微小尺寸無法生成的問題。基于以上2種情況,會導致復雜草圖生成錯誤或者生成草圖不準確。本文基于VB.Net對SolidWorks進行二次開發,分析開發過程中的問題,并提出一些解決方法。
SoildWorks二次開發中草圖繪制失敗主要有兩方面的原因:一方面是對象捕捉的影響,開啟對象捕捉后,系統錯誤的捕捉導致繪制失敗;另一方面是繪制的線條過小,模型草圖的尺寸很小時,微小尺寸無法通過SolidWorks API的庫函數生成。
SolidWorks中自帶了幾何關系/捕捉這個功能,用戶在使用SolidWorks進行繪制草圖時,軟件會自動捕捉草圖中的端點、中點、相切、垂直等幾何關系,方便設計人員草圖的繪制[4]。但是,在通過調用庫函數對SolidWorks進行二次開發時,軟件無法通過庫函數知道線與線之間的約束關系,會自動給繪制的草圖增加一些錯誤的約束,正因為這些錯誤的約束,導致草圖繪制錯誤。
如圖1所示,打開對象捕捉后,在繪制球閥草圖時,由于兩端點之間距離過小,系統自動將兩根線的端點連接在一起,關閉對象捕捉后,則可以成功繪制草圖。但是,關閉對象捕捉后,生成的看似閉合的草圖之間會存在縫隙,無法生成閉合草圖,因此無法對草圖進行特征操作。

圖1 球閥手柄草圖
關閉對象捕捉產生間隙的原因主要是數據類型導致的,通過VB.Net進行編程時,一般變量數據類型都設為單精度型(Single)或雙精度(Double)型。無論單精度還是雙精度在儲存中都分為符號位、指數位和尾數部分等3個部分[5]。這種結構是一種科學計數法,把一個浮點數表示為尾數乘以2的指數次方再添加符號[6]。但有些小數無法完整地用二進制來表示,從而在儲存時可能有誤差。
在通過SolidWorks平臺經用底層API繪制草圖時,如果繪制的直線長度小于2 mm時或者圓弧夾角小于2°時,這段直線或圓弧將不會生成。
在通過API函數進行開發時,所用的單位都是以米為單位[7],但在SolidWorks操作時所用的一般都以毫米為單位[8]。在繪制微小尺寸時,本就微小的尺寸在縮小1000倍后變得更小,系統誤認為繪制直線的兩點坐標一致,導致微小尺寸無法生成。
針對以上2個問題,本文中總共給出了3種方法,即取消對象捕捉、增加幾何約束和一種新提出的“剪切法”。每種方法有其不同的適用情景,在使用各個方法時,開發人員需要根據實際情況選擇合適的解決方法。
SolidWorks自帶的對象捕捉的功能會影響草圖的繪制,可以通過關閉草圖對象捕捉功來解決問題。此方法繪制的草圖雖然可以通過SolidWorks中的修復草圖命令進行修復,但在SolidWorks API中暫時還沒有修復草圖的命令,因此,一般情況下關閉對象捕捉法主要用于直接繪制閉合圖形的情況,例如繪制矩形、圓形、鍵槽等。
圖2所示的水泵開關指示燈草圖。開啟對象捕捉后,繪制一系列圓時,有些圓會自動與相鄰的圓施加相切約束,導致繪制不正確。關閉對象捕捉后,草圖生成成功,而且繪制的圖形是封閉圖形,不會影響后續的特征生成。

圖2 水泵開關指示燈草圖
在實際使用過程中,我們一般都是先獲取原用戶對象捕捉設置,再關閉對象捕捉,進行草圖繪制,繪制結束后再恢復原用戶設置,這樣可以避免運行代碼時修改用戶原始的SolidWorks設置。其中VB.Net代碼如下:

SolidWorks的Api中的庫函數可以對草圖進行尺寸標注、修改尺寸和施加各種約束,通過各種約束條件把草圖進行完全約束,可以繪制出合格的草圖。在基于VB.Net的SolidWorks二次開發中,添約束的庫函數為[9]:
Part.SketchAddConstraints( IdStr As String ),其中約束類型主要有以下幾種:在對草圖進行尺寸標注時,我們需要先選中需要標注的對象,再進行標注。庫函數[9]如下:


圖3為水泵開關主體的草圖,該草繪中存在多個細小尺寸,通過標注尺寸、修改尺寸和添加約束的方法,能夠精確地繪制該草圖。

圖3 水泵開關草圖
用約束法精確繪制草圖時,碰到需要多個約束才能精確繪制的草繪,需要花費大量時間進行約束,會大大增加開發難度,因此,通過綜合前2個方法的優點,提出了一種名為“剪切法”的新方法。“剪切法”主要是利用了SolidWorks API中的剪切函數,利用剪切函數修剪草圖時,可以修復關閉對象捕捉后草圖不封閉的問題。方法的主要流程如圖4所示,首先關閉對象捕捉,在繪制非閉合曲線時將線條繪制的長度大于需要繪制的真實長度,然后打開對象捕捉,通過SolidWorks API中的剪切函數,修剪不需要的線。最后對草圖進行標注,使其完全約束。打開對象捕捉后,使用剪切函數能使交點處的點施加重合約束,解決了無法生成封閉草圖的問題,巧妙地避開關閉對象捕捉的缺點。此方法中SolidWorks API中的剪切函數為[9]:

圖4 剪切法操作流程
Part.SketchManager.SketchTrim( Option As String, X As Double, Y As Double , Z As Double)
使用“剪切法”繪制復雜草圖時,可以通過很少的代碼就可以得到非常復雜的草圖,極大地提高了開發效率。
通過以上對草圖繪制問題的研究,將該研究中的方法運用于三片式球閥的三維參數化設計中,同時也驗證了“剪切法”的實用性。
在對三片式球閥進行參數化設計時,由于球閥手柄特別薄,尺寸比較小,所以繪制時最為麻煩。圖5為用“剪切法”繪制三片式球閥手柄的截面草圖的流程,首先繪制出大致的草圖,然后使用剪切函數修剪草圖,成功繪制出手柄的截面草圖,且草圖內有陰影。在SolidWorks中草圖有陰影表示為封閉圖形,可以對草圖進行拉伸(Imodel-Doc2:: FeatureExtrusion)、旋轉(IModelDoc2:: FeatureRevolve2)、掃描(IModelDoc2:: InsertProtrusionSwept4)、放樣(IModelDoc2:: InsertProtrusionBlend 4)等特征操作[9]。手柄的繪制表明“剪切法”在實際運用時能夠較好地完成設計要求,且使用簡單。

圖5 三片式球閥手柄草圖繪制流程
在本文開發的三片式球閥的三維參數化設計應用程序中,球閥的設計準則與參數主要參考閥門設計手冊[10]。并使用Microsoft Access建立關系數據庫。其中應用程序的可視化界面如圖6所示。

圖6 三片式球閥的三維參數化設計可視化界面
應用程序中主要零件材料中有3種材料,分別是碳鋼、不銹鋼和鍛鋼。選擇不同材料時,會根據選擇的材料調用Access數據庫自動選擇閥門各部分使用的材料。同樣,修改球閥型號時,閥門各部分尺寸也會自行調整。在創建完三片式球閥的三維圖后,該程序還可以一鍵導出球閥的BOM表,導出的BOM表為Excel文件,如圖7所示。導出BOM表的VB.Net代碼為:

圖7 三片式球閥BOM表


本文通過分析SolidWorks二次開發過程中草圖不精準的問題,提出了3種方法解決了工程實際問題,得出以下結論:1)利用以上的方法可以提高建模的精確度,極大地減少開發的工作量;2)在繪制復雜草圖時,提出了“剪切法”,與前兩種方法相比,該方法可以通過簡潔的代碼獲得準確的草圖,為以后二次開發的發展提供了新的思路;3)本文中提到的方法具有通用性,除了SolidWorks平臺,對于其他工程軟件的二次開發平臺,例如Pro/E、UG等軟件,也都適用。