用VisualC++開發SolidWorks標準件庫,讓我們看看以下,中國模具工業協會唯一指定模具設計基地---科技,將為您作詳細的介紹。
SolidWorks軟件是完全基于 Windows 的 CAD/CAE/ CAM/ PDM 桌面集成系統 ,它的核心技術是在 Windows 環境下生成的 ,充分利用和發揮了Windows的強大威力和OLE技術,具有用戶界面友好,上手快的優點。該軟件支持 Visual Basic、Visual C++或其它 OLE 開發語言,免費提供二次開發工具API,用戶二次開發的應用程序,可直接掛在SolidWorks菜單下,形成統一的界面。然而SolidWorks 與許多商品化的 CAD/ CAM 系統如PRO/E、UG、AUTOCAD 等一樣 ,它們雖然在模具行業中得到了廣泛應用 ,但由于這些 CAD/ CAM 系統都是作為通用機械設計與制造軟件來設計的,不是特別針對模具的,因此為了提高模具設計的效率,需要對其進行二次開發。
1用VISUAL C++ 開發 SolidWorks 的原理
SolidWorks 通過 OL E 技術為用戶提供強大的二次開發接口 API ,其中包括含有數以百計的功能函數。API 接口采用面向對象的方法 ,所有的函數都是有關對象的方法或屬性。這些對象涵蓋了所有 SolidWorks的數據模型 ,通過這些對象屬性的設置和方法的調用 ,用戶可以在自己開發的 DLL 中實現與 SolidWorks 相同的功能。
這些 API 函數可被 Visual C++ 、Visual Basic、Delphi、VBA ( EXCEL 、ACCESS) C、C++ 或 SolidWorks 的宏文件調用 ,使得開發出的程序具有直接訪問 SolidWorks的能力。當使用 Visual Basic 進行開發時 ,只能采用外掛的工作模式 ,即需要用戶的應用程序和 SolidWorks之間進行前臺后臺切換 ,所以降低了設計效率。而使用 Visual C++ 開發的應用程序可以直接嵌入到 SolidWorks 內部 ,加載成功后應用程序菜單直接出現在 SolidWorks 的主菜單上 ,如同 SolidWorks的自帶功能一樣進行工作 ,極大地提高了設計效率。
2用VISUAL C++ 開發 SolidWorks 的關鍵技術
2. 1 組件對象模型(COM)
開發 *.DLL 需要了解 COM 技術。COM 是微軟公司、數字設備公司(DEC) 及其他一些公司所支持的一種軟件結構的"工業標準"。SolidWorks 作為基于 Windows 的原創軟件 ,為便于用戶開發的程序與 SolidWorks通信 ,提供了采用 COM 技術開發應用程序的方法。用戶開發的代碼可以作為獨立的EXE 文件或 DLL 文件存在 ,它們就是 COM 模塊。采用 COM 技術在 SolidWorks 平臺上作二次開發時 ,通過直接訪問 SolidWorks 底層對象可以方便地擴充 SolidWorks的功能。
2. 2 動態鏈接庫(DLL) 的建立
獨立的 EXE 文件和 DLL 文件都可以作為COM 的組件 ,但是編寫 EXE 程序時 ,必須每次在做原型改變時都重建并測試。與此不同 ,可以創建較小的 DLL 模塊 ,并單獨測試 ,客戶程序在運行時很快裝載并連接用戶的 DLL。SolidWorks 提供了DLL 加載的接口 ,能夠將用戶的 DLL 通過加載嵌入到 SolidWorks內部。
2. 3 數據庫的創建
系統采用 Access 作為管理數據庫的工具。使用DAO (Data Access Objects) 技術對數據庫操作。Visual C++ 開發 DAO 數據庫應用的方法和步驟與ODBC(Open Data base Connectivity) 基本類似 ,但Visual C++ 的 MFC 包含的 DAO 類比 ODBC 類更加豐富 ,使得利用 DAO 實現某些數據庫操作(如數據庫查詢)更加簡單、方便。
3 開發思路及技巧
3. 1 開發思路
SolidWorks 是基于參數化和特征造型技術的軟件 ,對其進行二次開發應遵循參數化 CAD 的原則。即對于企業中系列化、通用化和標準程度高的產品 ,其包含的拓撲信息基本上是一樣的 ,不同的僅是幾何信息。對于這類產品 ,可以將已知條件及其它隨著產品規格而變化的基本參數用相應的變量代替 ,然后根據這些已知條件和基本參數 ,由 SolidWorks查詢數據庫 ,或由 SolidWorks 計算出所需的全部數據 ,自動完成設計 ,并在屏幕上顯示出來。
3. 2 開發方式的選擇
采用參數化原則設計標準件庫大體分兩種:程序驅動法;尺寸參數驅動法。選用程序驅動法時 ,可在用戶界面的對話框中輸入初始參數并對數據庫進行查詢 ,然后用從數據庫中提取的參數進行繪圖。其中繪圖部分代碼要靠程序員完成 ,程序驅動法可以借助SolidWorks 的宏記錄功能。SolidWorks 的宏可以記錄標準件模板生成的全部過程并生成 VBscript 程序代碼 ,然后由人工轉換為 Visual C++程序。
選用尺寸參數驅動法時 ,首先在 SolidWorks 中繪制標準件的模板零件并保存為*.sldprt 文件 ,同時對要進行尺寸驅動的尺寸命名 ,如"L @草圖 1"。然后等用戶選擇完參數后 ,在內存中打開已存的 *.sldprt 文件 ,并用從數據庫中提取的參數替換"L @草圖 1"尺寸 ,重新建模 ,生成新的零件。
3. 3 開發步驟及技巧
(1) 從 SolidWorks 公司網站下載向導文件SWIZARD. awx ,將其添加到 MicrosoftVisualstudio/Common/ MSDev98/ Template 目錄下。然后 ,在 Visual C++ 中用該向導創建工程 ,添加相關代碼 ,編譯生成 *.DLL 文件。
分頁
(2) 若使用程序驅動法 , 如果開發者本身對于 SolidWorks API函數不是很了解 ,可以用宏錄制標準件生成的過程并保存為*.swp 文件 ,再用菜單里工具/ 宏操作/ 編輯打開 VB 界面 ,只需把這里的代碼改為 Visual C++的代碼就可以了。而且 VB 與Visual C++ 的函數名基本相同 ,只是參數有所不同。
(3) 調試的時候可以設置斷點跟蹤 ,也可以在有可能出錯的地方放置如 AfxMessageBox(- T("提取參數 ") ,MB-OK,0) 的語句 ,以便在程序調試運行時確定問題所在。
4 系統組成
4. 1 界面的設計
系統界面的設計應遵循用戶界面友好的原則。一個用戶界面的友好屬性應包括:使用方便、界面熟悉、有靈活的提示幫助信息、良好的交互方式、良好的出錯處理等。按照模具國家標準 ,系統中設計的系統菜單如圖 1 所示。
4. 2 系統的使用
單擊上述菜單將會出現如圖 2 所示的標準件導入對話框。對話框界面由幾個屬性頁組成 ,選擇尺寸規格后按查詢按鈕 ,系統會根據數據輸入控件里的數據(如 4.00 ×20 的圓柱頭卸料螺釘) 去查詢標準件的數據庫文件 ,查詢所得的數據將出現在標準件屬性表里 ,點擊確定 ,零件將被導入。如果用戶需要調整尺寸 r 和 r1 可以點擊相應的按鈕進行微調。
4. 3 系統數據庫的使用
如果需要瀏覽當前零件所有的數據 ,只需要點擊圖 2 中的瀏覽按鈕。例如用戶當前界面是"帶柄圓形上模座",點擊瀏覽 ,則出現如圖 3 所示的數據庫管理對話框 ,在此可以瀏覽帶柄圓形上模座的所有數據 ,并為有權限的用戶提供可以添加、刪除或修改數據的功能選項。
5 一個實現程序驅動法的例子
(1) 用 SolidWorks Add - In AppWizard 向導創建 Example1 例子
(2) 添加對話框資源 ,屬性設置如下 :IDD-DIALO G1 CAPTION 為"立方體例子",添加控件調整如圖 4。
(3) 添加對話框類 CL IFAN GTI 和數據成員變量
IDC- EDIT1 double m-x
IDC- EDIT2 double m-y
IDC- EDIT3 double m-l
(4) 在工作區 CLASSV IEW 中 ,添加 CExample1 的公有成員函數void lifangti (double ca , double cb ,double cl)
(5) 在 EXAMPL EAPP. APP 中添加 # include "Resource. h"頭文件 ,并完成程序驅動法繪圖代碼如下:
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"頭文件 ,并在菜單響應函數 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中輸入位置坐標 ,邊長 L 中輸入 20 ,點擊確定 ,運行情況如圖 5 所示。