三维机械设计软件SolidWorks是一套基于Windows的CAD/CAE/CAM/PDM桌面集成系统,是由美国SolidWorks公司在总结和继承大型机械CAD软件的基础上,在Windows环境下实现的第一个机械三维CAD软件。它为用户提供产品级的自动设计工具。SolidWorks的突出特点是:三维参数化特征造型,特征管理员功能,全相关的数据管理,它功能丰富、操作简单、维护方便、学习周期短、应用开发方便,与多家CAM、CAE软件有紧密接口。
SolidWorks是基于特征的三维参数化造型软件,对其进行二次开发可以遵循参数化CAD的原则。与以往非参数化CAD系统相比,参数化技术很大程度上提高了二次开发的效率。SolidWorks提供了完整的免费的二次开发工具API(ApplicationProgramming Interface应用编程接口)。凡支持COM编程的开发工具,如Visual C++6.0(以下简称VC++)、Visual Basic、Delphi等均可直接调用这些API函数开发出用户自己的程序模块,提高设计的效率与正确率。
为了方便用户进行二次开发,SolidWorks提供了几百个API接口。这些API接口分为两种,即OLE Automation的IDispatch和作为Windows基础的COM(Component Object Model组件对象模型)。作为系统开发,COM是更合适的选择。使用Visual Basic进行开发时,只能采取外挂的工作方式,即需要在用户的应用程序和SolidWorks之间进行前后台切换,所以降低了设计效率。而COM接口支持使用VC++编程工具开发DLL(Dynamic Link Library动态链接库)程序,使用VC++开发的DLL应用程序模块可以直接嵌入到SolidWorks内部。加载成功后用户程序菜单直接出现在SolidWorks主菜单上,如同SolidWorks自带功能一样进行操作,极大地提高了设计效率。因此,本文就基于VC++阐述SolidWorks的二次开发。
1 基于VC++6.0的So I.dWorks二次开发途径
1.1 使用工程向导Swizard.awx进行二次开发
首先,从SolidWorks公司的网站下载编程向导文件Swizard.awx,将其拷贝至Microsoft Visual Studio\CommonhMSDev98\Template目录下,把\SolidWorks\samples\appcomm文件夹下所有文件拷贝至lJkMicrosoft Visual Studio\VC98klnclude文件夹内。然后,在VC++中应用向导创建动态链接库工程(以下简称DLL),加人相关代码,编译生成动态链接库(*.DLL)文件。用户二次开发的应用程序,可直接挂在SolidWorks的菜单下,形成统一的界面。一般而言,开发人员首先需要在SolidWorks的界面上添加自己的菜单项,以此作为激活用户程序的接口,完成与用户的数据交换。在上述过程中,用户程序必须响应SolidWorks的一些消息通知,以保证各个操作的合法性,即要检测文档类型等。最后,连接DLL,将必要的用户程序输出。
使用这种方法进行二次开发简单易行,容易理解,避免了安装和使用中的困惑。
1.2 使用ATL(c/c++)对象向导进行二次开发
首先从SolidWorks公司的网站下载SolidWorksAPI SDK,将其解压缩并根据向导安装SolidWorks API SDK,然后在Visual C++中选择ATL COM Wizard创建动态链接库,加人相关代码,编译生成动态链接库(*.DLL)文件。此方式可在SolidWorks插件管理器中生成插件,并以菜单形式自动添加在新建或打开的零件视图中,以完成特定功能。
此方式适合于SolidWorks的中级使用者,可使用户方便地以插件的形式将菜单嵌人SolidWorks主菜单中,简捷易行,但有一点值得注意,该向导生成的*.dll,只能用于SolidWbrks 2003。
1.3 自定义向导和用现有的实例进行二次开发
首先启动VC++,选择Custom AppWizard寻找现成的文件以生成新的工程。如果不想用向导,直接修改现有的实例也是一种方法。使用此种方法可在SolidWorks的菜单栏中出现新下拉菜单用以完成用户新添加的功能。这种方法适合于对SolidWorksAPI熟悉的用户,可以通过找一些现成的文件,更加灵活地使用自定义的模板进行二次开发。
2 SolidWorks二次开发过程
这里以挤压模垫套(如图l所示)的参数化建模的二次开发为例,详细介绍SolidWorks二次开发的过程,图2为开发程序的主控页面。具体步骤如下。
图l 垫套的剖视图及主要尺寸
图2 程序的主控页面
1)安装VC++并配置开发环境 利用SolidWorks提供的二次开发模板创建工程。为确保包含必要的头文件,完全按照第一种方法配置卡发环境。
2)绘制零件模板 模板零件的创建方法与一般三维模型的建模方式相同,但注意以下几点:分页(1)在对模板进行特征造型时,对二维截面轮廓,利用尺寸标注和施加相切、共线等关系实现对几何图形的全约束;
(2)正确设置控制三维模型的设计参数。尺寸参数可分为两种:一是与其它参数无关的独立参数;另一种是与其它参数有关的非独立参数。前者主要用来控制三维模型的几何尺寸和拓扑关系,后者可以用独立参数为自变量的关系式表示;
(3) 正确建立设计参数与三维模型尺寸变量之间的关联。主要有两种方法:一是在创建模型模板需要输入数值时,直接输入参数名。二是利用SolidWorks的关系式功能创建新的关系式,使系统自动创建的约束参数名与设计参数关联。
3)VC++编程步骤
(1)利用SolidWorks提供的开发模板创建工程SWSD为工程名称
(2) 在CLASSVIEW中分别为CSWSDAPP的成员函数docCreateMenu,docRemoveMenu添加代码实现为系统添加菜单:
//自定义菜单的插入位置
#define swMenuPosition 5
//添加顶层弹出式菜单[SWSD]
hres=pFrame->AddMenu(auT("SWSD(&G))"),
swMenuPosition,&bres);
//添加[SWSD]的下一级菜[垫套]
hres=pFrame->AddMenultem(auT("SWSD(&G)"),
auT("垫套($D)..."),swLastPosition,
auT("SWSD@MyFunction"{),&bres);
(3)点击FILEVIEW在SWSD.def文件里声明导出函数。DLL中包含一个导出函数表,通过函数的符号化的名字或序号(可选)识别这些函数。函数表也包含了函数在DLL内的地址。当SolidWorks首先加载DLL时,它并不知道将要调用函数的地址,但知道符号名和序号。动态连接过程后,在DLL中建立一张客户调用与函数地址的表把SolidWorks的调用与DLL中函数的地址连接起来;
(4)在SWSD.h中对导出函数声明;
(5)在SWSD.cpp文件里添加导出函数的函数体,这个函数就是用户开发的菜单所调用的执行函数,在这个导出函数里添加具体的代码可以实现开发人员需要程序执行的功能。
4)编译 由于SolidWorks不再支持加载调试软件版本,因此,用户不能用"Win32 Debug"或"Win32 MBCS Debug"调试模式。为了调试代码,用户必须使用"Pseudo Debug"调试模式。此模式需要链接适当的MFC Release库,否则SolidWorks运行时可能会和己加载的MFC库发生资源冲突。
5)应用程序的运行 如果应用程序是以DLL方式建立,则运行步骤如下:运行SolidWorks程序,选择File.Open并且改变打开文件类型到ADD.Ins(.DLL)。选取预定的DLL并单击OK,则用户的应用程序加入到SolidWorks。
在VC++调试模式下运行SolidWorks进行代码的调试:在用户的VC++开发环境中,选择GO编译。在弹出的对话框中键入SolidWorks.EXE及其路径名。一旦SolidWorks运行选择File.Open并且改变打开文件类型到ADD.Ins(.DLL),选择要调试的DLL文件并单击OK,则用户的应用程序加入到SolidWorks。
6)注册 有两种方式可以把用户开发的模块添加到注册表里面,使SolidWbrks可以自动的找到二次开发的模块:
(1)在VC++开发环境中,使用利用SolidWorks提供的二次开发模板创建工程,VC++提示是不是把这个工程添加到注册表里的时候,选择"是"。
(2)当更换系统或者在其他计算机中安装开发的新模块时,可以在工程文件夹内找到*.reg的一个注册表文件,双击就可把这个模块信息写入注册表。
3 结语
介绍了在Visual C++6.0的集成开发环境下,通过动态链接库DLL调用SolidWorks API函数进行二次开发,实现机械零件参数化设计的方法。可以参考该方法对SolidWorks进行其他较为复杂的二次开发工作,建立适合用户需要的、专用的SolidWbrks功能模块。通过实例表明,基于DLL的SolidWbrks二次开发可以很好地实现与Solidwbrks系统的无缝集成,能满足用户开发三维CAD系统的需要。