劉 媛
(安徽電子信息職業(yè)技術(shù)學院電子系,安徽 蚌埠 233000)
基于VC++的Solidworks機械零件參數(shù)化設(shè)計
劉 媛
(安徽電子信息職業(yè)技術(shù)學院電子系,安徽 蚌埠 233000)
SolidWorks是目前使用十分廣泛的三維CAD軟件。Solidworks的二次開發(fā)可以為現(xiàn)代企業(yè)提供本地的專門的CAD/CAE軟件。使用SolidWorks提供的 SDK工具調(diào)用API函數(shù)開發(fā)SolidWorks DLL 程序是二次開發(fā)的關(guān)鍵技術(shù)。
SolidWorks;vc++;二次開發(fā);活動錐套
SolidWorks是Windows環(huán)境下的基于三維造型的機械設(shè)計CAD軟件,目前使用十分廣泛。由于采用參數(shù)化尺寸驅(qū)動和特征造型技術(shù),以及全相關(guān)的數(shù)據(jù)管理,在建立零件的三維模型后 ,可以動態(tài)模擬裝配過程 ,還可以由三維實體自動生成二維工程圖。在某一階段中對模型進行了修改 ,則相關(guān)的數(shù)據(jù)文件也會相應更改?!?】
雖然 SolidWorks軟件易學易用,但仍然不能完全滿足特定企業(yè)的特殊要求。為了適合特定企業(yè)的特殊需求,形成企業(yè)自己的特色,使 SolidWorks在我國的企業(yè)中有效地發(fā)揮作用,并使常用的或重復的任務(wù)自動化,提高效率,就必須對其進行本地化和專業(yè)化的二次開發(fā)工作。
以 SolidWorks的二次開發(fā)為例,目前對三維造型軟件進行二次開發(fā)的一般流程如圖1所示。
SolidWorks的API(Application Program Interface,應用程序接口)是一個基于 OLE (Object Linking and Embedding,對象的嵌入與鏈接)Automation或 COM(Component Object Model,組件對象模型)的編程接口,其中包含了數(shù)以百計的功能函數(shù),利用這些函數(shù),用戶可以開發(fā)出所需要的SolidWorks的專用模塊?!?】
圖1 二次開發(fā)的一般流程
由于SolidWorks API接口采用面向?qū)ο蟮姆椒ǎ泻瘮?shù)都是相關(guān)對象的屬性或方法。程序員可以對這些完全面向?qū)ο蟮念惻缮宇悾?進一步生成這些類的對象,就可以設(shè)置或修改對象的屬性,運行對象的方法,實現(xiàn)對于SolidWorks 的數(shù)據(jù)庫、圖形系統(tǒng)和系統(tǒng)界面的訪問。通過對 SolidWorks對象的屬性的設(shè)置和方法的調(diào)用,就可以在用戶自己開發(fā)的 DLL中實現(xiàn)滿足用戶需求的功能。
在SolidWorks2007二次開發(fā)時,使用的是ATL對象向?qū)А癝olidWorks API SDK”。SolidWorks API SDK是基于SolidWorks API的二次開發(fā)工具??梢詮腟olidWorks網(wǎng)站下載,下載以后解壓安裝,在默認地址 C:Program FilesMicrosoft Visual StudioCommonMSDev98Template ATL中生成文件 SwAddin。API中的數(shù)百個函數(shù)都可以被Visual C + + 調(diào)用。
啟動vc++,選擇ATL COM AppWizard項目類型開發(fā)dll類型的文件。使用DLL有很多益處,例如,一旦裝入內(nèi)存,函數(shù)就可以被正在運行的程序所調(diào)用,不必重復編譯和鏈接。也會使得程序的開發(fā)更為靈活。對于 SolidWorks而言,DLL最大的好處就是可以實現(xiàn)對SolidWorks底層的開發(fā),且代碼的執(zhí)行效率高,可以將DLL以插件的形式無縫集成到SolidWorks主菜單中去。
下面以液壓機輔具的一個活動錐套零件為例詳細說明設(shè)計方法和過程。
4.1 設(shè)計思想
本程序可以根據(jù)用戶輸入的尺寸參數(shù)在 SolidWorks系統(tǒng)中自動繪出活動錐套的零件圖 ,從而實現(xiàn)活動錐套的三維造型參數(shù)化設(shè)計。程序是在Visual C++6.0 開發(fā)環(huán)境下首先建立與 SolidWorks2007軟件 COM 接口的通訊 ,定制SolidWorks 系統(tǒng)的菜單,并通過 MFC類庫進行主控界面設(shè)計,編譯后生成 SolidWorks 的動態(tài)鏈接庫文件dll .注冊成功后就可以加載為 SolidWorks 系統(tǒng)的插件。DLL 文件加載成功后 ,用戶就可打開自定義的菜單彈出程序的主控界面 ,通過人機交互操作輸入活動錐套的尺寸參數(shù), SolidWorks 自動繪制圖形,實現(xiàn)了二次開發(fā)的 CAD系統(tǒng)與SolidWorks的無縫集成。
4.2 設(shè)計過程
4.2.1 增加菜單和菜單項
首先用VC++建立一個ATL COM AppWizard工程,名為 hdjt, 服務(wù)器類型為 DLL。建立工程以后,在 hdjt class右鍵選擇new atl object,進一步選擇swaddin。將ATL object Wizard name 改為 swobj,這樣就可以生成一個在插件和Solidworks之間進行通訊的接口Iswobj。
建立字符串表后,編輯AddMenus()函數(shù),添加代碼,具體可以參閱資料[2].編譯、構(gòu)建以后得到一個名為hdjt的dll文件。一般情況下,該dll文件已經(jīng)注冊為Solidworks的插件。直接用Solidworks打開這個dll文件,就可以實現(xiàn)dll文件的加載。
4.2.2 繪制圖形
在Solidworks環(huán)境下,繪制活動錐套的圖形,并獲取基本尺寸的名稱,例如“D1@草圖1”等。并將文件保存。
4.2.3 建立插件和Solidworks通訊的接口
用VC++建立一個ATL COM AppWizard工程,服務(wù)器類型為DLL。建立工程以后,選擇new atl object,進一步選擇swaddin。如果將ATL object Wizard name 改為swobj。這樣就生成了插件和Solidworks之間進行通訊的接口Iswobj.
4.2.4 添加對話框控件
在對話框內(nèi)添加編輯控件10個,靜態(tài)文本控件10個,圖像控件一個,按鈕控件 2個。在 resource file選項卡的bitmap中,將活動錐套的位圖引入資源。在圖像控件的屬性中進行圖片設(shè)置。編輯控件和靜態(tài)文本控件名稱的對應關(guān)系如表1所示。
表1 編輯控件和靜態(tài)文本控件名稱的對應關(guān)系表
修改button1按鈕控件的標題為:“開始繪制”,進一步添加button1的響應函數(shù)。
先在對話框的頭文件中定義 CComPtr<ISldWorks> 類型的變量m_iSldWorks_dlg1;然后在button1對應的函數(shù)中添加代碼.定義了文件名和打開文件方式以后,再定義配置管理器對象并獲得當前文件的配置管理器,關(guān)鍵代碼如下:
void dlg8306::OnButton1()
{ ………
CComBSTR Name(_T(m_peizhiming));//定義配置名
pConfigurationManager->AddConfiguration(Name,Comm ent,AlternateName,0,ParentConfigName,Description,&pConfig uration);///增加一個配置
BSTR *paramNames=new BSTR[10];///初始化參數(shù)名字符串數(shù)組
CString a0="D1@草圖1";///定義參數(shù)名
paramNames[0]=a0.AllocSysString();//將 參 數(shù) 名 由CString類型轉(zhuǎn)換為BSTR類型
CString b0=m_d1.GetBuffer(0);///獲得用戶輸入的參數(shù)值
paramValues[0]=b0.AllocSysString();///將 參 數(shù) 名 由CString類型轉(zhuǎn)換為BSTR類型pConfigurationManager->ISetConfigurationParams ( Name, paramCount, paramNames, paramValues, &retval);///設(shè)置配置中的各參數(shù)值
………}
按照類似的方法,修改button2按鈕控件的標題為:“退出”,添加對應的響應函數(shù)。
4.2.5 編譯、構(gòu)建
編譯、構(gòu)建成DLL,加載到Solidworks里以后,當單擊用戶增加的Solidworks“活動錐套”主菜單下的“零件繪制”菜單項的時候,出現(xiàn)如圖2所示對話框:
圖2 主控界面
在出現(xiàn)的對話框中輸入用戶設(shè)定的數(shù)據(jù),單擊“開始繪制”按鈕,就可以自動繪制出如圖3所示的三維圖形:
圖3 三維零件圖
本文介紹了在 Visual C++ 6.0集成開發(fā)環(huán)境下開發(fā)動態(tài)鏈接庫DLL的方法,以實現(xiàn)對SolidWorks進行二次開發(fā),完成機械零件參數(shù)化設(shè)計。實例表明 ,基于 COM技術(shù)的SolidWorks二次開發(fā)可以實現(xiàn)SolidWorks系統(tǒng)的功能擴展,操作簡單 ,能滿足用戶本地化三維CAD系統(tǒng)的需要。
[1]王文波,等. SolidWorks二次開發(fā)基礎(chǔ)與實例[M].北京:清華大學出版社,2009.
[2]江洪,等. SolidWorks二次開發(fā)實例解析[M].北京:機械工業(yè)出版社,2004.
(責任編校:何俊華)
TP399
A
1673-2219(2010)12-0096-03
2010-08-25
劉媛(1971-),女,安徽蚌埠人,合肥工業(yè)大學機械學院碩士研究生,安徽電子信息職業(yè)技術(shù)學院電子系教師,研究方向為CAD/CAE/CAM。