三維機械設計軟件SolidWorks是一套基于Windows的CAD/CAE/CAM/PDM桌面集成系統,是由美國SolidWorks公司在總結和繼承大型機械CAD軟件的基礎上,在Windows環境下實現的第一個機械三維CAD軟件。它為用戶提供產品級的自動設計工具。SolidWorks的突出特點是:三維參數化特征造型,特征管理員功能,全相關的數據管理,它功能豐富、操作簡單、維護方便、學習周期短、應用開發方便,與多家CAM、CAE軟件有緊密接口。
SolidWorks是基于特征的三維參數化造型軟件,對其進行二次開發可以遵循參數化CAD的原則。與以往非參數化CAD系統相比,參數化技術很大程度上提高了二次開發的效率。SolidWorks提供了完整的免費的二次開發工具API(ApplicationProgramming Interface應用編程接口)。凡支持COM編程的開發工具,如Visual C++6.0(以下簡稱VC++)、Visual Basic、Delphi等均可直接調用這些API函數開發出用戶自己的程序模塊,提高設計的效率與正確率。
為了方便用戶進行二次開發,SolidWorks提供了幾百個API接口。這些API接口分為兩種,即OLE Automation的IDispatch和作為Windows基礎的COM(Component Object Model組件對象模型)。作為系統開發,COM是更合適的選擇。使用Visual Basic進行開發時,只能采取外掛的工作方式,即需要在用戶的應用程序和SolidWorks之間進行前后臺切換,所以降低了設計效率。而COM接口支持使用VC++編程工具開發DLL(Dynamic Link Library動態鏈接庫)程序,使用VC++開發的DLL應用程序模塊可以直接嵌入到SolidWorks內部。加載成功后用戶程序菜單直接出現在SolidWorks主菜單上,如同SolidWorks自帶功能一樣進行操作,極大地提高了設計效率。因此,本文就基于VC++闡述SolidWorks的二次開發。
1 基于VC++6.0的So I.dWorks二次開發途徑
1.1 使用工程向導Swizard.awx進行二次開發
首先,從SolidWorks公司的網站下載編程向導文件Swizard.awx,將其拷貝至Microsoft Visual Studio\CommonhMSDev98\Template目錄下,把\SolidWorks\samples\appcomm文件夾下所有文件拷貝至lJkMicrosoft Visual Studio\VC98klnclude文件夾內。然后,在VC++中應用向導創建動態鏈接庫工程(以下簡稱DLL),加人相關代碼,編譯生成動態鏈接庫(*.DLL)文件。用戶二次開發的應用程序,可直接掛在SolidWorks的菜單下,形成統一的界面。一般而言,開發人員首先需要在SolidWorks的界面上添加自己的菜單項,以此作為激活用戶程序的接口,完成與用戶的數據交換。在上述過程中,用戶程序必須響應SolidWorks的一些消息通知,以保證各個操作的合法性,即要檢測文檔類型等。最后,連接DLL,將必要的用戶程序輸出。
使用這種方法進行二次開發簡單易行,容易理解,避免了安裝和使用中的困惑。
1.2 使用ATL(c/c++)對象向導進行二次開發
首先從SolidWorks公司的網站下載SolidWorksAPI SDK,將其解壓縮并根據向導安裝SolidWorks API SDK,然后在Visual C++中選擇ATL COM Wizard創建動態鏈接庫,加人相關代碼,編譯生成動態鏈接庫(*.DLL)文件。此方式可在SolidWorks插件管理器中生成插件,并以菜單形式自動添加在新建或打開的零件視圖中,以完成特定功能。
此方式適合于SolidWorks的中級使用者,可使用戶方便地以插件的形式將菜單嵌人SolidWorks主菜單中,簡捷易行,但有一點值得注意,該向導生成的*.dll,只能用于SolidWbrks 2003。
1.3 自定義向導和用現有的實例進行二次開發
首先啟動VC++,選擇Custom AppWizard尋找現成的文件以生成新的工程。如果不想用向導,直接修改現有的實例也是一種方法。使用此種方法可在SolidWorks的菜單欄中出現新下拉菜單用以完成用戶新添加的功能。這種方法適合于對SolidWorksAPI熟悉的用戶,可以通過找一些現成的文件,更加靈活地使用自定義的模板進行二次開發。
2 SolidWorks二次開發過程
這里以擠壓模墊套(如圖l所示)的參數化建模的二次開發為例,詳細介紹SolidWorks二次開發的過程,圖2為開發程序的主控頁面。具體步驟如下。
1)安裝VC++并配置開發環境 利用SolidWorks提供的二次開發模板創建工程。為確保包含必要的頭文件,完全按照第一種方法配置卡發環境。
2)繪制零件模板 模板零件的創建方法與一般三維模型的建模方式相同,但注意以下幾點:
(1)在對模板進行特征造型時,對二維截面輪廓,利用尺寸標注和施加相切、共線等關系實現對幾何圖形的全約束;
(2)正確設置控制三維模型的設計參數。尺寸參數可分為兩種:一是與其它參數無關的獨立參數;另一種是與其它參數有關的非獨立參數。前者主要用來控制三維模型的幾何尺寸和拓撲關系,后者可以用獨立參數為自變量的關系式表示;
(3) 正確建立設計參數與三維模型尺寸變量之間的關聯。主要有兩種方法:一是在創建模型模板需要輸入數值時,直接輸入參數名。二是利用SolidWorks的關系式功能創建新的關系式,使系統自動創建的約束參數名與設計參數關聯。
3)VC++編程步驟
(1)利用SolidWorks提供的開發模板創建工程SWSD為工程名稱
(2) 在CLASSVIEW中分別為CSWSDAPP的成員函數docCreateMenu,docRemoveMenu添加代碼實現為系統添加菜單:
//自定義菜單的插入位置
#define swMenuPosition 5
//添加頂層彈出式菜單[SWSD]
hres=pFrame->AddMenu(auT("SWSD(&G))"),
swMenuPosition,&bres);
//添加[SWSD]的下一級菜[墊套]
hres=pFrame->AddMenultem(auT("SWSD(&G)"),
auT("墊套($D)..."),swLastPosition,
auT("SWSD@MyFunction"{),&bres);
(3)點擊FILEVIEW在SWSD.def文件里聲明導出函數。DLL中包含一個導出函數表,通過函數的符號化的名字或序號(可選)識別這些函數。函數表也包含了函數在DLL內的地址。當SolidWorks首先加載DLL時,它并不知道將要調用函數的地址,但知道符號名和序號。動態連接過程后,在DLL中建立一張客戶調用與函數地址的表把SolidWorks的調用與DLL中函數的地址連接起來;
(4)在SWSD.h中對導出函數聲明;
(5)在SWSD.cpp文件里添加導出函數的函數體,這個函數就是用戶開發的菜單所調用的執行函數,在這個導出函數里添加具體的代碼可以實現開發人員需要程序執行的功能。
4)編譯 由于SolidWorks不再支持加載調試軟件版本,因此,用戶不能用"Win32 Debug"或"Win32 MBCS Debug"調試模式。為了調試代碼,用戶必須使用"Pseudo Debug"調試模式。此模式需要鏈接適當的MFC Release庫,否則SolidWorks運行時可能會和己加載的MFC庫發生資源沖突。
5)應用程序的運行 如果應用程序是以DLL方式建立,則運行步驟如下:運行SolidWorks程序,選擇File.Open并且改變打開文件類型到ADD.Ins(.DLL)。選取預定的DLL并單擊OK,則用戶的應用程序加入到SolidWorks。
在VC++調試模式下運行SolidWorks進行代碼的調試:在用戶的VC++開發環境中,選擇GO編譯。在彈出的對話框中鍵入SolidWorks.EXE及其路徑名。一旦SolidWorks運行選擇File.Open并且改變打開文件類型到ADD.Ins(.DLL),選擇要調試的DLL文件并單擊OK,則用戶的應用程序加入到SolidWorks。
6)注冊 有兩種方式可以把用戶開發的模塊添加到注冊表里面,使SolidWbrks可以自動的找到二次開發的模塊:
(1)在VC++開發環境中,使用利用SolidWorks提供的二次開發模板創建工程,VC++提示是不是把這個工程添加到注冊表里的時候,選擇"是"。
(2)當更換系統或者在其他計算機中安裝開發的新模塊時,可以在工程文件夾內找到*.reg的一個注冊表文件,雙擊就可把這個模塊信息寫入注冊表。
3 結語
介紹了在Visual C++6.0的集成開發環境下,通過動態鏈接庫DLL調用SolidWorks API函數進行二次開發,實現機械零件參數化設計的方法??梢詤⒖荚摲椒▽olidWorks進行其他較為復雜的二次開發工作,建立適合用戶需要的、專用的SolidWbrks功能模塊。通過實例表明,基于DLL的SolidWbrks二次開發可以很好地實現與Solidwbrks系統的無縫集成,能滿足用戶開發三維CAD系統的需要。
|