劉 媛
(安徽電子信息職業(yè)技術(shù)學(xué)院電子系,安徽 蚌埠 233000)
基于VC++的Solidworks機(jī)械零件參數(shù)化設(shè)計(jì)
劉 媛
(安徽電子信息職業(yè)技術(shù)學(xué)院電子系,安徽 蚌埠 233000)
SolidWorks是目前使用十分廣泛的三維CAD軟件。Solidworks的二次開(kāi)發(fā)可以為現(xiàn)代企業(yè)提供本地的專門的CAD/CAE軟件。使用SolidWorks提供的 SDK工具調(diào)用API函數(shù)開(kāi)發(fā)SolidWorks DLL 程序是二次開(kāi)發(fā)的關(guān)鍵技術(shù)。
SolidWorks;vc++;二次開(kāi)發(fā);活動(dòng)錐套
SolidWorks是Windows環(huán)境下的基于三維造型的機(jī)械設(shè)計(jì)CAD軟件,目前使用十分廣泛。由于采用參數(shù)化尺寸驅(qū)動(dòng)和特征造型技術(shù),以及全相關(guān)的數(shù)據(jù)管理,在建立零件的三維模型后 ,可以動(dòng)態(tài)模擬裝配過(guò)程 ,還可以由三維實(shí)體自動(dòng)生成二維工程圖。在某一階段中對(duì)模型進(jìn)行了修改 ,則相關(guān)的數(shù)據(jù)文件也會(huì)相應(yīng)更改。【1】
雖然 SolidWorks軟件易學(xué)易用,但仍然不能完全滿足特定企業(yè)的特殊要求。為了適合特定企業(yè)的特殊需求,形成企業(yè)自己的特色,使 SolidWorks在我國(guó)的企業(yè)中有效地發(fā)揮作用,并使常用的或重復(fù)的任務(wù)自動(dòng)化,提高效率,就必須對(duì)其進(jìn)行本地化和專業(yè)化的二次開(kāi)發(fā)工作。
以 SolidWorks的二次開(kāi)發(fā)為例,目前對(duì)三維造型軟件進(jìn)行二次開(kāi)發(fā)的一般流程如圖1所示。
SolidWorks的API(Application Program Interface,應(yīng)用程序接口)是一個(gè)基于 OLE (Object Linking and Embedding,對(duì)象的嵌入與鏈接)Automation或 COM(Component Object Model,組件對(duì)象模型)的編程接口,其中包含了數(shù)以百計(jì)的功能函數(shù),利用這些函數(shù),用戶可以開(kāi)發(fā)出所需要的SolidWorks的專用模塊。【2】

圖1 二次開(kāi)發(fā)的一般流程
由于SolidWorks API接口采用面向?qū)ο蟮姆椒ǎ泻瘮?shù)都是相關(guān)對(duì)象的屬性或方法。程序員可以對(duì)這些完全面向?qū)ο蟮念惻缮宇悾?進(jìn)一步生成這些類的對(duì)象,就可以設(shè)置或修改對(duì)象的屬性,運(yùn)行對(duì)象的方法,實(shí)現(xiàn)對(duì)于SolidWorks 的數(shù)據(jù)庫(kù)、圖形系統(tǒng)和系統(tǒng)界面的訪問(wèn)。通過(guò)對(duì) SolidWorks對(duì)象的屬性的設(shè)置和方法的調(diào)用,就可以在用戶自己開(kāi)發(fā)的 DLL中實(shí)現(xiàn)滿足用戶需求的功能。
在SolidWorks2007二次開(kāi)發(fā)時(shí),使用的是ATL對(duì)象向?qū)А癝olidWorks API SDK”。SolidWorks API SDK是基于SolidWorks API的二次開(kāi)發(fā)工具。可以從SolidWorks網(wǎng)站下載,下載以后解壓安裝,在默認(rèn)地址 C:Program FilesMicrosoft Visual StudioCommonMSDev98Template ATL中生成文件 SwAddin。API中的數(shù)百個(gè)函數(shù)都可以被Visual C + + 調(diào)用。
啟動(dòng)vc++,選擇ATL COM AppWizard項(xiàng)目類型開(kāi)發(fā)dll類型的文件。使用DLL有很多益處,例如,一旦裝入內(nèi)存,函數(shù)就可以被正在運(yùn)行的程序所調(diào)用,不必重復(fù)編譯和鏈接。也會(huì)使得程序的開(kāi)發(fā)更為靈活。對(duì)于 SolidWorks而言,DLL最大的好處就是可以實(shí)現(xiàn)對(duì)SolidWorks底層的開(kāi)發(fā),且代碼的執(zhí)行效率高,可以將DLL以插件的形式無(wú)縫集成到SolidWorks主菜單中去。
下面以液壓機(jī)輔具的一個(gè)活動(dòng)錐套零件為例詳細(xì)說(shuō)明設(shè)計(jì)方法和過(guò)程。
4.1 設(shè)計(jì)思想
本程序可以根據(jù)用戶輸入的尺寸參數(shù)在 SolidWorks系統(tǒng)中自動(dòng)繪出活動(dòng)錐套的零件圖 ,從而實(shí)現(xiàn)活動(dòng)錐套的三維造型參數(shù)化設(shè)計(jì)。程序是在Visual C++6.0 開(kāi)發(fā)環(huán)境下首先建立與 SolidWorks2007軟件 COM 接口的通訊 ,定制SolidWorks 系統(tǒng)的菜單,并通過(guò) MFC類庫(kù)進(jìn)行主控界面設(shè)計(jì),編譯后生成 SolidWorks 的動(dòng)態(tài)鏈接庫(kù)文件dll .注冊(cè)成功后就可以加載為 SolidWorks 系統(tǒng)的插件。DLL 文件加載成功后 ,用戶就可打開(kāi)自定義的菜單彈出程序的主控界面 ,通過(guò)人機(jī)交互操作輸入活動(dòng)錐套的尺寸參數(shù), SolidWorks 自動(dòng)繪制圖形,實(shí)現(xiàn)了二次開(kāi)發(fā)的 CAD系統(tǒng)與SolidWorks的無(wú)縫集成。
4.2 設(shè)計(jì)過(guò)程
4.2.1 增加菜單和菜單項(xiàng)
首先用VC++建立一個(gè)ATL COM AppWizard工程,名為 hdjt, 服務(wù)器類型為 DLL。建立工程以后,在 hdjt class右鍵選擇new atl object,進(jìn)一步選擇swaddin。將ATL object Wizard name 改為 swobj,這樣就可以生成一個(gè)在插件和Solidworks之間進(jìn)行通訊的接口Iswobj。
建立字符串表后,編輯AddMenus()函數(shù),添加代碼,具體可以參閱資料[2].編譯、構(gòu)建以后得到一個(gè)名為hdjt的dll文件。一般情況下,該dll文件已經(jīng)注冊(cè)為Solidworks的插件。直接用Solidworks打開(kāi)這個(gè)dll文件,就可以實(shí)現(xiàn)dll文件的加載。
4.2.2 繪制圖形
在Solidworks環(huán)境下,繪制活動(dòng)錐套的圖形,并獲取基本尺寸的名稱,例如“D1@草圖1”等。并將文件保存。
4.2.3 建立插件和Solidworks通訊的接口
用VC++建立一個(gè)ATL COM AppWizard工程,服務(wù)器類型為DLL。建立工程以后,選擇new atl object,進(jìn)一步選擇swaddin。如果將ATL object Wizard name 改為swobj。這樣就生成了插件和Solidworks之間進(jìn)行通訊的接口Iswobj.
4.2.4 添加對(duì)話框控件
在對(duì)話框內(nèi)添加編輯控件10個(gè),靜態(tài)文本控件10個(gè),圖像控件一個(gè),按鈕控件 2個(gè)。在 resource file選項(xiàng)卡的bitmap中,將活動(dòng)錐套的位圖引入資源。在圖像控件的屬性中進(jìn)行圖片設(shè)置。編輯控件和靜態(tài)文本控件名稱的對(duì)應(yīng)關(guān)系如表1所示。

表1 編輯控件和靜態(tài)文本控件名稱的對(duì)應(yīng)關(guān)系表
修改button1按鈕控件的標(biāo)題為:“開(kāi)始繪制”,進(jìn)一步添加button1的響應(yīng)函數(shù)。
先在對(duì)話框的頭文件中定義 CComPtr<ISldWorks> 類型的變量m_iSldWorks_dlg1;然后在button1對(duì)應(yīng)的函數(shù)中添加代碼.定義了文件名和打開(kāi)文件方式以后,再定義配置管理器對(duì)象并獲得當(dāng)前文件的配置管理器,關(guān)鍵代碼如下:
void dlg8306::OnButton1()
{ ………
CComBSTR Name(_T(m_peizhiming));//定義配置名
pConfigurationManager->AddConfiguration(Name,Comm ent,AlternateName,0,ParentConfigName,Description,&pConfig uration);///增加一個(gè)配置
BSTR *paramNames=new BSTR[10];///初始化參數(shù)名字符串?dāng)?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按鈕控件的標(biāo)題為:“退出”,添加對(duì)應(yīng)的響應(yīng)函數(shù)。
4.2.5 編譯、構(gòu)建
編譯、構(gòu)建成DLL,加載到Solidworks里以后,當(dāng)單擊用戶增加的Solidworks“活動(dòng)錐套”主菜單下的“零件繪制”菜單項(xiàng)的時(shí)候,出現(xiàn)如圖2所示對(duì)話框:

圖2 主控界面
在出現(xiàn)的對(duì)話框中輸入用戶設(shè)定的數(shù)據(jù),單擊“開(kāi)始繪制”按鈕,就可以自動(dòng)繪制出如圖3所示的三維圖形:

圖3 三維零件圖
本文介紹了在 Visual C++ 6.0集成開(kāi)發(fā)環(huán)境下開(kāi)發(fā)動(dòng)態(tài)鏈接庫(kù)DLL的方法,以實(shí)現(xiàn)對(duì)SolidWorks進(jìn)行二次開(kāi)發(fā),完成機(jī)械零件參數(shù)化設(shè)計(jì)。實(shí)例表明 ,基于 COM技術(shù)的SolidWorks二次開(kāi)發(fā)可以實(shí)現(xiàn)SolidWorks系統(tǒng)的功能擴(kuò)展,操作簡(jiǎn)單 ,能滿足用戶本地化三維CAD系統(tǒng)的需要。
[1]王文波,等. SolidWorks二次開(kāi)發(fā)基礎(chǔ)與實(shí)例[M].北京:清華大學(xué)出版社,2009.
[2]江洪,等. SolidWorks二次開(kāi)發(fā)實(shí)例解析[M].北京:機(jī)械工業(yè)出版社,2004.
(責(zé)任編校:何俊華)
TP399
A
1673-2219(2010)12-0096-03
2010-08-25
劉媛(1971-),女,安徽蚌埠人,合肥工業(yè)大學(xué)機(jī)械學(xué)院碩士研究生,安徽電子信息職業(yè)技術(shù)學(xué)院電子系教師,研究方向?yàn)镃AD/CAE/CAM。