王宣 董玉德
摘要:参数化设计系统的二次开发是企业深化CAD应用,提升产品研发效率的潮流,本文结合实例研究探讨了采用VC++编程工具对SolidWorks零件进行二次开发实现参数化设计的方法,对开发专用零件参数化设计系统具有一定的参考价值。
关键词:SolidWorks;参数化设计;二次开发;VC++6.0
中图分类号:TP391.72 文献标识码:A 文章编号:1672-4437(2014)02-0047-04
1 引言
参数化设计可以减少设计人员的大量重复性工作,明显提高设计效率,所以对三维软件进行二次开发,开发出企业专用的产品参数化设计功能模块,已成为企业界深化CAD应用,进一步提高产品研发效率的发展趋势。SolidWorks作为目前主流三维CAD软件之一,不仅具有功能强大、易学易用和技术创新的特色,而且SolidWorks还提供了开发性和兼容性良好的应用程序开发接口 (SolidWorks API),凡是支持OLE和COM的编程语言如Visual C++、Visual Basic、Delphi等均可用于SolidWorks的二次开发【1】。
VC++6.0是当今流行的软件开发工具之一,是程序员的首选编程利器。使用VC++6.0对SolidWorks进行二次开发,能够充分利用SolidWorks API,而且开发出的DLL应用程序作为插件直接嵌入到SolidWorks内部,加载成功后专用系统菜单直接出现在SolidWorks主菜单上,如SolidWorks原有菜单一样操作方便,极大地提高了设计效率。
2 二次开发方法
在SolidWorks中,用二次开发实现零件的参数化设计主要有程序驱动和尺寸驱动两种方法【2】,尺寸驱动法需要先建立参数化模板模型,然后在开发程序控制下,通过读取不同的尺寸参数值,驱动模板模型改变, 实现参数化设计;而程序驱动法是在开发程序控制下,自动建立不同的模型,完成参数化设计。尺寸驱基金项目:广东省教育部产学研结合项目(编号:2011B090400598)动法程序代码简洁高效,是目前参数化设计较常用的方法,本实例就选用这种方法,开发出的零件参数化设计流程如图1所示。
图1 零件参数化设计流程图
3 二次开发实例
下面以一个简单的支板零件为例,详细说明参数化设计二次开发方法。
3.1 建立零件模板的三维模型
参数化建模是以约束来表达产品模型的形状特征,通过定义一组参数来控制设计结果,实现通过调整参数来修改设计模型,从而达到设计一簇在形状或功能上具有相似性的零件的设计方案。目前,参数化建模可分为基于尺寸驱动的参数化建模、基于约束驱动的参数化建模、基于特征的参数化建模三种方法【3】。基于尺寸驱动的参数化建模,是指通过修改模型的几何尺寸,达到改变模型形状的目的,它是目前最基本的应用最为广泛的建模方法,本文零件模板就是采用这种三维建模的方法。
在So1idWorks中建立零件模板的三维模型时,最好重命名模型驱动尺寸使之与参数尺寸名称一致,便于程序识别。图2所示文件名为“支板.SLDPRT"的三维模型,将其保存在“D:\参数化设计\模板模型\”下,以备调用。
图2 支板模板模型图
3.2 建立零件尺寸参数数据表
为了方便快捷通过参数化设计生成相似零件, 需要将参数数据存储在数据库中, 目前可供选择的数据库很多【4】。 其中Access 简单易用, 接口灵活,完全满足零件参数化设计对数据管理的要求, 因此常选用Access作为管理数据的工具,本实例就是采用Access建立尺寸参数数据库的。
在Access中创建数据库“zz.mdb”,在库中建立支板尺寸参数数据表,如图3所示,保存路径为“D:\参数化设计\数据库\零件库\ zz.mdb”。
图3 支板尺寸参数数据表
3.3 二次开发编程
(1)创建新的ATL工程并添加ATL对象
在Visual C++6.0环境中,使用ATL COM AppWizard对象向导建立DLL工程,自定义名称为zz,然后在工程中添加新的ATL对象,在新对象属性对话框中添加ATL对象名称zzp,向导自动生成接口Izzp,该接口是所开发的参数化设计插件与SolidWorks的通信接口,接下来通过添加代码来实现本插件所要具备的功能。
(2)添加菜单和菜单项
在工程资源的String Table(字串表)中定制菜单资源,如图4所示
图4 菜单项String Table设置
其中“零件库@参数化设计”表示:“参数化设计”是添加到So1idWorks界面的菜单名称,零件库是该下拉菜单的菜单项。
(3)创建用户操作界面
首先用对话框资源编辑器创建支板对话框模板资源,然后利用类向导Class Wizard添加对话框类zbandlg,并向对话框类中添加消息处理函数、成员变量等,向导自动生成该对话框类的zbandlg.h和zbandlg.cpp文件 ;最后声明对话框类的对象以便激活打开对话框,添加的主要代码如下:
void seconddlg::getSW(ISldWorks *Sw) //添加连接对话框与SldWorks对象的方法
{
this->m_iSldWorks_dlg = Sw;
}
CComPtr
zbandlg *pdlg=new zbandlg; //新命名对话框
pdlg->Create(IDD_zban,NULL); //生成对话框
pdlg->ShowWindow(SW_SHOW); //将对话框设置为可见
pdlg->getSW(this->m_iSldWorks_dlg); //调用对话框的Get SW函数
ShowWindow(SW_HIDE);//显示对话框
(4)访问数据库
将已建立的支板尺寸参数数据表载入支板零件操作界面的列表框中,主要实现步骤是:
1)在工程的StdAfx.h文件里引入ADO库文件, 添加代码如下:
#import "C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF") rename("Parameter","adoParameter")
msado15.dll动态链接库中定义了ADO接口对象。
2)连接数据库获取数据表
一般使用函数open或使用UDL文件连接数据库。因为采用udl文件建立连接后,当数据源改变后,只需双击相应的udl文件打开属性对话框重置数据源即可,不用更改软件编制的程序,所以本实例选用此方法,建立的1.udl文件如图5所示。
在zbandlg.h和zbandlg.cpp文件中添加的主要代码是:
_ConnectionPtr m_pConnection; //添加数据库连接对象变量
_RecordsetPtr m_pRecordset; //添加数据库记录集变量
m_pConnection->ConnectionString="File Name=D:\\参数化设计\\数据库\\1.udl";
//连接zz.mdb数据库
m_pRecordset->Open("SELECT * FROM zban "…), // 获取支板零件的尺寸参数数据表
图5 udl文件建立图
(5)参数尺寸驱动模板模型改变,生成新零件
1)将支板零件操作界面列表框内的一行数据,赋值给对话框中的编辑框,获得驱动尺寸参数。主要代码是:
Void zbandlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) // 添加双击列表框响应事件函数
ListView_SetExtendedListViewStyleEx(m_List.m_hWnd,LVS_EX_FULLROWSELECT,0xFFFFFFFF);//选择某行
if(nItem>=0 && nItem CString str = m_List.GetItemText(nItem,subItem);//得到某行某列的值 2)点击支板零件操作界面上的“三维图”按钮,实现调入零件模板模型,参数尺寸驱动,生成新零件。主要代码是: void zhizdlg::OnButton1()//添加单击“三维图”按钮响应事件函数 CComBSTR fileName(_T("D:\\参数化设计\\模板模型\\支板.SLDPRT"));//定义文件名 CComPtr m_iSldWorks_dlg->OpenDoc6(fileName,swDocPART,Options,NULL,&Errors,&Warnings,&m_iModelDoc);//打开文件 ........................................ CString a0="L@草图1";//定义参数名 paramNames[0]=a0.AllocSysString();//将参数名CString类型变量转换为BSTR类型变量 CString b0=m_L.GetBuffer(0);//获得用户输入的参数值 paramValues[0]=b0.AllocSysString();//将参数值CString类型变量转换为BSTR类型变量 pConfigurationManager->ISetConfigurationParams ( Name, paramCount, paramNames, paramValues, &retval);//设置配置中的各参数值,生成新零件 3.4 编译链接, 生成.dll文件,加载插件 在SolidWorks中,通过点击菜单“工具/插件”,打开插件对话框,选择zz插件完成加载;也可点击菜单“文件/打开”,选择文件类型Add-Ins, 打开zz.dll实现加载。 3.5 运行实例 打开SolidWorks菜单栏里“参数化设计”下拉菜单,选择“零件库”选项,打开“零件库” 图6 打开支板零件操作界面图 图7 支板三维图 对话框,再点击“支板”按钮,打开“支板”用户操作界面,如图6所示,双击列表框“系列号”是“ZBAN4”的一行数据,编辑框内出现相应尺寸参数,也可手动输入尺寸参数,单击“三维图”按钮,生成新的三维模型,如图7所示。 4 结束语 在SolidWorks软件环境下,利用VC++6.0编程语言开发出零件库参数化设计系统,探讨了参数化设计插件的开发过程和使用方法,对SolidWorks软件的二次开发研究和实践工作具有一定的参考价值。 —————— 参考文献 [1] 董玉德,赵韩.CAD二次开发理论与技术[M].合肥:合肥工业大学出版社,2009:7-11. [2] 王东,蒲小琼.基于SolidWorks的机械零件参数化设计[J].机械制造与研究,2004,33(5):15-17. [3] 陈璐.基于SolidWorks的参数化建模[J].CAD/CAM与制造业信息化,2007,(2-3):72-73. [4] 陈岳坪,高健,王虎奇.基于ATL技术的SolidWorks二次开发新方法[J].模具工业,2009,35(6):5-7.