1前言
為了縮短產(chǎn)品開發(fā)周期、提高市場競爭能力 ,各企業(yè)在產(chǎn)品設(shè)計中大多要對通用 CAD 軟件進行二次開發(fā) ,建立適合自己的專用模塊。但目前所開發(fā)的 CAD 系統(tǒng) ,一般是對二維繪圖軟件如 AutoCAD 進行二次開發(fā) ,實現(xiàn)機械零件參數(shù)化設(shè)計。由于二維繪圖軟件本身無法實現(xiàn)參數(shù)化驅(qū)動 ,所以對其進行二次開發(fā)的周期長、工作量大、不易實現(xiàn) CAX系統(tǒng)的集成。而三維繪圖軟件如 SolidWorks ,采用特征建模、參數(shù)化驅(qū)動可方便地設(shè)計出三維實體模型。利用三維實體模型可以自動生成二維工程圖;可以在生產(chǎn)之前動態(tài)模擬裝配過程、進行干涉檢查;可以對重要零部件進行有限元分析與優(yōu)化設(shè)計(CAE) ;可以模擬數(shù)控加工(CAM) ;可以生成零件的工藝規(guī)程(CAPP) ,這樣就易于實現(xiàn) CAX系統(tǒng)的集成。所以基于三維繪圖軟件的二次開發(fā)必將成為今后 CAD 技術(shù)發(fā)展的主流。
本文將討論在 Visual C++6. 0 的集成開發(fā)環(huán)境下 ,對 SolidWorks 進行二次開發(fā)實現(xiàn)機械零件參數(shù)化設(shè)計的方法 ,并結(jié)合實例說明二次開發(fā)的具體實現(xiàn)過程。
1 SolidWorks 二次開發(fā)的原理
1. 1 SolidWorks 的 API 接口
SolidWorks 通過 OLE(Object Linking and Embedding ,對象的鏈接和嵌入) 技術(shù)為用戶提供了強大的二次開發(fā)接口 API(Application Programming Interface ,應(yīng)用程序界面) ,API 中包含了數(shù)百個可以在 Visual Basic、VBA(Excel 、Access 等) 、C、C++ 或 SolidWorks 宏文件調(diào)用的函數(shù)。SolidWorks API 接口采用面向?qū)ο蟮姆椒?,所有的函數(shù)都是有關(guān)對象的方法或?qū)傩?。用戶通過對這些對象屬性的設(shè)置和方法的調(diào)用 ,就可以在用戶自己開發(fā)的程序中對 SolidWorks 進行各種操作控制 ,完成零件草圖的繪制和修改;零件各種特征的建立和修改;零件的特征信息、裝配信息及工程圖紙信息的提取等。
1. 2 SolidWorks 二次開發(fā)的方法
SolidWorks 的API 接口分為兩種:一種是基于 OLE Automation 的 IDispatch 技術(shù) ;另一種開發(fā)方式是基于 Windows 基礎(chǔ)的 COM(Object Model ,組件對象模型) 。
基于 OLE Automation 的 IDispatch 技術(shù)作為快速開發(fā)的手段 ,一般常用于 VB、Delphi 編程語言的接口 ,通過 IDispatch 接口暴露對象的屬性和方法 ,以便在客戶程序中使用這些屬性并調(diào)用它所支持的方法。此種技術(shù)只能開發(fā) EXE形式的程序 ,所開發(fā)的 CAD 系統(tǒng)不能直接加掛在 SolidWorks 系統(tǒng)界面下 ,無法實現(xiàn)與 SolidWorks 系統(tǒng)的集成。
COM 是一種組件開發(fā)技術(shù) ,是 Microsoft 公司提出的并被大多數(shù)公司支持的一種標準協(xié)議 ,它建立了一個軟件模塊同另一個軟件模塊的連接 ,當這種連接建立之后 ,兩個模塊之間就可以通過接口來進行通訊。COM接口更為簡潔高效 ,這種技術(shù)可以使用最多的 SolidWorks API函數(shù)。實際上 SolidWorks 系統(tǒng)本身是用 VC++編寫的 ,所以使用 VC++語言通過 COM 接口開發(fā) ,可以實現(xiàn)對 SolidWorks 底層的開發(fā)并且代碼的執(zhí)行效率高。
通過 VC編寫基于 COM的動態(tài)連接庫 DLL(Dynamic Link Library)文件 ,能直接在 SolidWorks 的界面下添加菜單、工具條等 ,如圖 1 所示。在注冊表中注冊成功即可成為 SolidWorks 的插件 ,實現(xiàn)了與 SolidWorks 的無縫集成 ,是眾多二次開發(fā)方法中的首選 ,以下結(jié)合參數(shù)化設(shè)計銅合金軸承保持架擠壓模墊套的實例 ,介紹 DLL 程序的開發(fā)方法。
2 DLL 程序的具體實現(xiàn)過程
2. 1 DLL 的創(chuàng)建
SolidWorks 公司提供了制作 DLL 文件的向?qū)?,利用向?qū)0蹇煞奖憧旖莸厣?DLL 文件。具體步驟是:首先從 SolidWorks 公司的網(wǎng)站下載制作動態(tài)連接庫的向?qū)募?SWizard. awx",將其拷貝至 VC++安裝目錄下的 Common MSDev98 Template 文件夾 ,這時 VC 新建工程項中會出現(xiàn)"SolidWorks Add InAppWizard"向?qū)?。選擇此向?qū)л斎腠椖棵?3DCAD 后單擊 Next ,在 Step 1 of 2 選擇 SolidWorks 的安裝路徑 ,除了 Overload WNDPROC of ModelView復(fù)選框 ,選中其他所有復(fù)選框 ,然后單擊 Next 進入 Step 2 of 2 ,選中 Create Sample Feature Manager 和 ViewRegister Add - In at compile time 復(fù)選框后單擊 Finish 即可完成DLL 工程的創(chuàng)建。
2. 2 DLL 中添加資源的方法
在動態(tài)鏈接庫中 ,當用戶需要添加自己的資源如對話框時 ,應(yīng)明確指出在什么時候使用自己的資源 ,否則 SolidWorks 系統(tǒng)分不清那些是由系統(tǒng)控制的資源 ,那些是由用戶控制的資源 ,會發(fā)生沖突導(dǎo)致程序運行錯誤。避免資源沖突的方法是在使用自己資源前調(diào)用 Afx Get Resource Handle 函數(shù)保存當前的資源 ,然后調(diào)用 Afx Set Resource Handle 函數(shù)把當前資源設(shè)置成新的資源 ,當使用完自己的資源后 ,再調(diào)用Afx Set Resource Handle 函數(shù)恢復(fù)先前已保存的資源。創(chuàng)建本程序的運行界面時 ,首先用對話框編輯器創(chuàng)建對話框模板資源 ,如圖 2 所示加入所需控件 ,再用 Class wizard 為對話框生成 CTestDlg類(基類為 CDialog) ,并加入所需的成員變量 ,相關(guān)代碼如下:
/ / 保存當前系統(tǒng)資源
HINSTANCE saver = AfxGetResourceHandle() ;
/ / 把當前資源設(shè)置成新的資源
AfxSetResourceHandle(AfxGetResourceHandle() ) ;
CDlg1 dlg ; / / 聲明一個對話框類
If (int n = dlg. DoModal () = = IDOK) ; / / 按下繪圖按鈕后繪圖
{
drawdt( ) ; / / 參數(shù)化繪制墊套三維圖的自定義函數(shù)
}
/ / 恢復(fù)先前已保存的系統(tǒng)資源的句柄
AfxSetResourceHandle(saver) ;
相關(guān)文章
- 2021-08-23精通AutoCAD三維設(shè)計與開發(fā)PDF下載
- 2021-08-22AutoCAD 2013應(yīng)用與開發(fā)系列中文版AutoCAD 2013室內(nèi)裝
- 2021-08-22AutoCAD 2013應(yīng)用與開發(fā)系列中文版AutoCAD 2013機械圖
- 2021-08-19數(shù)字化成圖-最新AutoCAD地形圖測繪高級開發(fā)PDF下載
- 2021-08-03Autodesk RevitStructure2012應(yīng)用寶典 [歐特克軟件(中
- 2021-08-02Autodesk RevitMEP2012應(yīng)用寶典 [歐特克軟件(中國)有限
- 2021-08-02Autodesk Revit2013族達人速成 [歐特克軟件(中國)有限公
- 2021-08-01Visual LISP程序設(shè)計(AutoCAD 2006)PDF下載
- 2021-08-01Visual Basic與AutoCAD二次開發(fā)PDF下載
- 2021-07-31Autodesk Revit2012族達人速成 [歐特克軟件(中國)有限公