SolidWorks軟件是完全基于 Windows 的 CAD/CAE/ CAM/ PDM 桌面集成系統(tǒng) ,它的核心技術(shù)是在 Windows 環(huán)境下生成的 ,充分利用和發(fā)揮了Windows的強(qiáng)大威力和OLE技術(shù),具有用戶界面友好,上手快的優(yōu)點(diǎn)。該軟件支持 Visual Basic、Visual C++或其它 OLE 開發(fā)語言,免費(fèi)提供二次開發(fā)工具API,用戶二次開發(fā)的應(yīng)用程序,可直接掛在SolidWorks菜單下,形成統(tǒng)一的界面。然而SolidWorks 與許多商品化的 CAD/ CAM 系統(tǒng)如PRO/E、UG、AUTOCAD 等一樣 ,它們雖然在模具行業(yè)中得到了廣泛應(yīng)用 ,但由于這些 CAD/ CAM 系統(tǒng)都是作為通用機(jī)械設(shè)計(jì)與制造軟件來設(shè)計(jì)的,不是特別針對(duì)模具的,因此為了提高模具設(shè)計(jì)的效率,需要對(duì)其進(jìn)行二次開發(fā)。
1用VISUAL C++ 開發(fā) SolidWorks 的原理
SolidWorks 通過 OL E 技術(shù)為用戶提供強(qiáng)大的二次開發(fā)接口 API ,其中包括含有數(shù)以百計(jì)的功能函數(shù)。API 接口采用面向?qū)ο蟮姆椒?,所有的函數(shù)都是有關(guān)對(duì)象的方法或?qū)傩浴_@些對(duì)象涵蓋了所有 SolidWorks的數(shù)據(jù)模型 ,通過這些對(duì)象屬性的設(shè)置和方法的調(diào)用 ,用戶可以在自己開發(fā)的 DLL 中實(shí)現(xiàn)與 SolidWorks 相同的功能。
這些 API 函數(shù)可被 Visual C++ 、Visual Basic、Delphi、VBA ( EXCEL 、ACCESS) C、C++ 或 SolidWorks 的宏文件調(diào)用 ,使得開發(fā)出的程序具有直接訪問 SolidWorks的能力。當(dāng)使用 Visual Basic 進(jìn)行開發(fā)時(shí) ,只能采用外掛的工作模式 ,即需要用戶的應(yīng)用程序和 SolidWorks之間進(jìn)行前臺(tái)后臺(tái)切換 ,所以降低了設(shè)計(jì)效率。而使用 Visual C++ 開發(fā)的應(yīng)用程序可以直接嵌入到 SolidWorks 內(nèi)部 ,加載成功后應(yīng)用程序菜單直接出現(xiàn)在 SolidWorks 的主菜單上 ,如同 SolidWorks的自帶功能一樣進(jìn)行工作 ,極大地提高了設(shè)計(jì)效率。
2用VISUAL C++ 開發(fā) SolidWorks 的關(guān)鍵技術(shù)
2. 1 組件對(duì)象模型(COM)
開發(fā) *.DLL 需要了解 COM 技術(shù)。COM 是微軟公司、數(shù)字設(shè)備公司(DEC) 及其他一些公司所支持的一種軟件結(jié)構(gòu)的"工業(yè)標(biāo)準(zhǔn)"。SolidWorks 作為基于 Windows 的原創(chuàng)軟件 ,為便于用戶開發(fā)的程序與 SolidWorks通信 ,提供了采用 COM 技術(shù)開發(fā)應(yīng)用程序的方法。用戶開發(fā)的代碼可以作為獨(dú)立的EXE 文件或 DLL 文件存在 ,它們就是 COM 模塊。采用 COM 技術(shù)在 SolidWorks 平臺(tái)上作二次開發(fā)時(shí) ,通過直接訪問 SolidWorks 底層對(duì)象可以方便地?cái)U(kuò)充 SolidWorks的功能。
2. 2 動(dòng)態(tài)鏈接庫(DLL) 的建立
獨(dú)立的 EXE 文件和 DLL 文件都可以作為COM 的組件 ,但是編寫 EXE 程序時(shí) ,必須每次在做原型改變時(shí)都重建并測(cè)試。與此不同 ,可以創(chuàng)建較小的 DLL 模塊 ,并單獨(dú)測(cè)試 ,客戶程序在運(yùn)行時(shí)很快裝載并連接用戶的 DLL。SolidWorks 提供了DLL 加載的接口 ,能夠?qū)⒂脩舻?DLL 通過加載嵌入到 SolidWorks內(nèi)部。
2. 3 數(shù)據(jù)庫的創(chuàng)建
系統(tǒng)采用 Access 作為管理數(shù)據(jù)庫的工具。使用DAO (Data Access Objects) 技術(shù)對(duì)數(shù)據(jù)庫操作。Visual C++ 開發(fā) DAO 數(shù)據(jù)庫應(yīng)用的方法和步驟與ODBC(Open Data Base Connectivity) 基本類似 ,但Visual C++ 的 MFC 包含的 DAO 類比 ODBC 類更加豐富 ,使得利用 DAO 實(shí)現(xiàn)某些數(shù)據(jù)庫操作(如數(shù)據(jù)庫查詢)更加簡(jiǎn)單、方便。
3 開發(fā)思路及技巧
3. 1 開發(fā)思路
SolidWorks 是基于參數(shù)化和特征造型技術(shù)的軟件 ,對(duì)其進(jìn)行二次開發(fā)應(yīng)遵循參數(shù)化 CAD 的原則。即對(duì)于企業(yè)中系列化、通用化和標(biāo)準(zhǔn)程度高的產(chǎn)品 ,其包含的拓?fù)湫畔⒒旧鲜且粯拥?,不同的僅是幾何信息。對(duì)于這類產(chǎn)品 ,可以將已知條件及其它隨著產(chǎn)品規(guī)格而變化的基本參數(shù)用相應(yīng)的變量代替 ,然后根據(jù)這些已知條件和基本參數(shù) ,由 SolidWorks查詢數(shù)據(jù)庫 ,或由 SolidWorks 計(jì)算出所需的全部數(shù)據(jù) ,自動(dòng)完成設(shè)計(jì) ,并在屏幕上顯示出來。
3. 2 開發(fā)方式的選擇
采用參數(shù)化原則設(shè)計(jì)標(biāo)準(zhǔn)件庫大體分兩種:程序驅(qū)動(dòng)法;尺寸參數(shù)驅(qū)動(dòng)法。選用程序驅(qū)動(dòng)法時(shí) ,可在用戶界面的對(duì)話框中輸入初始參數(shù)并對(duì)數(shù)據(jù)庫進(jìn)行查詢 ,然后用從數(shù)據(jù)庫中提取的參數(shù)進(jìn)行繪圖。其中繪圖部分代碼要靠程序員完成 ,程序驅(qū)動(dòng)法可以借助SolidWorks 的宏記錄功能。SolidWorks 的宏可以記錄標(biāo)準(zhǔn)件模板生成的全部過程并生成 VBScript 程序代碼 ,然后由人工轉(zhuǎn)換為 Visual C++程序。
選用尺寸參數(shù)驅(qū)動(dòng)法時(shí) ,首先在 SolidWorks 中繪制標(biāo)準(zhǔn)件的模板零件并保存為*.sldprt 文件 ,同時(shí)對(duì)要進(jìn)行尺寸驅(qū)動(dòng)的尺寸命名 ,如"L @草圖 1"。然后等用戶選擇完參數(shù)后 ,在內(nèi)存中打開已存的 *.sldprt 文件 ,并用從數(shù)據(jù)庫中提取的參數(shù)替換"L @草圖 1"尺寸 ,重新建模 ,生成新的零件。
3. 3 開發(fā)步驟及技巧
(1) 從 SolidWorks 公司網(wǎng)站下載向?qū)募WIZARD. awx ,將其添加到 MicrosoftVisualstudio/Common/ MSDev98/ Template 目錄下。然后 ,在 Visual C++ 中用該向?qū)?chuàng)建工程 ,添加相關(guān)代碼 ,編譯生成 *.DLL 文件。
(2) 若使用程序驅(qū)動(dòng)法 , 如果開發(fā)者本身對(duì)于 SolidWorks API函數(shù)不是很了解 ,可以用宏錄制標(biāo)準(zhǔn)件生成的過程并保存為*.swp 文件 ,再用菜單里工具/ 宏操作/ 編輯打開 VB 界面 ,只需把這里的代碼改為 Visual C++的代碼就可以了。而且 VB 與Visual C++ 的函數(shù)名基本相同 ,只是參數(shù)有所不同。
(3) 調(diào)試的時(shí)候可以設(shè)置斷點(diǎn)跟蹤 ,也可以在有可能出錯(cuò)的地方放置如 AfxMessageBox(- T("提取參數(shù) ") ,MB-OK,0) 的語句 ,以便在程序調(diào)試運(yùn)行時(shí)確定問題所在。
4 系統(tǒng)組成
4. 1 界面的設(shè)計(jì)
系統(tǒng)界面的設(shè)計(jì)應(yīng)遵循用戶界面友好的原則。一個(gè)用戶界面的友好屬性應(yīng)包括:使用方便、界面熟悉、有靈活的提示幫助信息、良好的交互方式、良好的出錯(cuò)處理等。按照模具國(guó)家標(biāo)準(zhǔn) ,系統(tǒng)中設(shè)計(jì)的系統(tǒng)菜單如圖 1 所示。
4. 2 系統(tǒng)的使用
單擊上述菜單將會(huì)出現(xiàn)如圖 2 所示的標(biāo)準(zhǔn)件導(dǎo)入對(duì)話框。對(duì)話框界面由幾個(gè)屬性頁組成 ,選擇尺寸規(guī)格后按查詢按鈕 ,系統(tǒng)會(huì)根據(jù)數(shù)據(jù)輸入控件里的數(shù)據(jù)(如 4.00 ×20 的圓柱頭卸料螺釘) 去查詢標(biāo)準(zhǔn)件的數(shù)據(jù)庫文件 ,查詢所得的數(shù)據(jù)將出現(xiàn)在標(biāo)準(zhǔn)件屬性表里 ,點(diǎn)擊確定 ,零件將被導(dǎo)入。如果用戶需要調(diào)整尺寸 r 和 r1 可以點(diǎn)擊相應(yīng)的按鈕進(jìn)行微調(diào)。
4. 3 系統(tǒng)數(shù)據(jù)庫的使用
如果需要瀏覽當(dāng)前零件所有的數(shù)據(jù) ,只需要點(diǎn)擊圖 2 中的瀏覽按鈕。例如用戶當(dāng)前界面是"帶柄圓形上模座",點(diǎn)擊瀏覽 ,則出現(xiàn)如圖 3 所示的數(shù)據(jù)庫管理對(duì)話框 ,在此可以瀏覽帶柄圓形上模座的所有數(shù)據(jù) ,并為有權(quán)限的用戶提供可以添加、刪除或修改數(shù)據(jù)的功能選項(xiàng)。
5 一個(gè)實(shí)現(xiàn)程序驅(qū)動(dòng)法的例子
(1) 用 SolidWorks Add - In AppWizard 向?qū)?chuàng)建 Example1 例子
(2) 添加對(duì)話框資源 ,屬性設(shè)置如下 :IDD-DIALO G1 CAPTION 為"立方體例子",添加控件調(diào)整如圖 4。
(3) 添加對(duì)話框類 CL IFAN GTI 和數(shù)據(jù)成員變量
IDC- EDIT1 double m-x
IDC- EDIT2 double m-y
IDC- EDIT3 double m-l
(4) 在工作區(qū) CLASSV IEW 中 ,添加 CExample1 的公有成員函數(shù)void lifangti (double ca , double cb ,double cl)
(5) 在 EXAMPL EAPP. APP 中添加 # include "Resource. h"頭文件 ,并完成程序驅(qū)動(dòng)法繪圖代碼如下:
void CExample1App : : lifangti (double ca , double cb , double cl)
{ L PMODELDOC pModDoc = NULL ;
LPPARTDOC ret ;
TheApplication - > m-pSldWorks - >INewPart ( &ret) ;
HRESUL T res = TheApplication - >GetSWApp () - > get- IActiveDoc( &pModDoc) ;
if (pModDoc = = NULL)
return FALSE;
LPPARTDOC pPartDoc = NULL ;
res = pModDoc - > QueryInterface (IID-IPartDoc ,(L PVOID 3 ) &pPartDoc) ;
ASSERT(res = = S-OK) ;
VARIANT-BOOL retval ;pModDoc - > SelectByID(auT ("前視") ,auT ("PLANE") ,0 ,0 ,0 , &retval) ;
pModDoc - > ShowNamedView2 (auT ("3 Normal To") ,0) ;
pModDoc - > GridOptions(0 ,0. 001 ,0 ,0 ,10 ,1 ,0 ,0 ,0. 1 ,1) ;
pModDoc - > InsertSketch() ;
pModDoc - > CreateLineVB ( - ca , cb , 0 , - ca+ cl , cb , 0) ;
pModDoc - > CreateLineVB ( - ca + cl , cb , 0 ,- ca + cl , cb - cl , 0) ;
pModDoc - > CreateLineVB ( - ca + cl , cb - cl ,0 , - ca , cb - cl , 0) ;
pModDoc - > CreateLineVB ( - ca , cb - cl , 0 ,- ca , cb , 0) ;
pModDoc - > ClearSelection() ;
pPartDoc - > FeatureExtrusion (1 , 0 , 0 , 0 , 0 ,cl , 0. 01 , 0 , 0 , 0 , 0 , 0. 01745329251994 ,0. 01745329251994 , 0 , 0) ;
pModDoc - > ShowNamedView2 (auT ("3 Iso2metric") ,7) ;
pModDoc - > ViewZoomtofit () ;
pModDoc - > Release() ;
pPartDoc - > Release() ;
return TRU E ;
}
在 Example1. cpp 中添加 # include "LIFAN GTI. h"頭文件 ,并在菜單響應(yīng)函數(shù) MenuItemCB (void) 里添加如下程序段
void MenuItemCB(void)
{ CL IFAN GTI dlg ;int n = dlg. DoModal () ; TheApplication - > lifangti (dlg. m-x ,dlg. m-y ,dlg. m-l) ;
return ;
}
(7) 編譯后用 SolidWorks 打開文件 ,選擇加載 Example1. dll 文件。在左下角 X 和右下角 Y中輸入位置坐標(biāo) ,邊長(zhǎng) L 中輸入 20 ,點(diǎn)擊確定 ,運(yùn)行情況如圖 5 所示。
|