APP下载

基于SolidWorks的二次开发应用

2014-02-26

锻压装备与制造技术 2014年2期
关键词:注册表二次开发菜单

刘 颖

(中国民用航空华东地区空中交通管理局 山东分局,山东 济南 250107)

0 引言

SolidWorks是基于特征的三维参数化造型软件,对其二次开发可遵循参数化CAD的原则。与以往非参数化CAD系统相比,参数化技术很大程度上提高了二次开发效率。SolidWorks提供了完整的免费的二次开发工具API(Application Programming Interface,应用编程接口)。凡支持COM编程的开发工具,如VC++、VB、Delphi等均可直接调用这些API函数开发出用户自己的程序模块,提高设计的效率与正确率。

为方便用户进行二次开发,SolidWorks提供了几百个API接口。这些API接口分为两种,即OLE Automation的IDispatch和作为Windows基础的COM(Component Object Model组件对象模型)。作为系统开发,COM为更合适的选择。使用VB进行开发时,只能采取外挂工作方式,即需在用户应用程序和Solid-Works之间进行前后台切换,降低了设计效率。而COM接口支持使用VC++编程工具开发DLL(Dynamic Link Library,动态链接库)程序,使用VC++开发的DLL应用程序模块可直接嵌入到SolidWorks内部。加载成功后用户程序菜单直接出现在SolidWorks主菜单上,如同SolidWorks自带功能一样进行操作,极大提高了设计效率。因此,本文就基于VC++阐述SolidWorks的二次开发。

1 基于VC++的SolidWorks二次途径

1.1 使用工程向导Swizard.awx进行二次开发

将编程向导文件SWizard.awx拷贝至Microsoft Visual StudioCommonMSDev98Template目录下,把SolidWorkssamplesappcomm文件夹下所有文件拷贝至Microsoft Visual StudioVC98Include文件夹下。在VC中应用向导创建动态链接库工程 (以下简称DLL),加入相关代码,编译生成动态链接库(*.DLL)文件。用户二次开发的应用程序,可直接挂在Solid-Works的菜单下,形成统一界面。一般而言,开发人员首先需要在SolidWorks的界面上添加自己的菜单项,以此作为激活用户程序的接口,完成与用户的数据交换。在上述过程中,用户程序必须响应SolidWorks的一些消息通知,以保证各个操作的合法性,即要检测文档类型等。最后,连接DLL,将必要的用户程序输出。

1.2 使用ATL(C/C++)对象向导进行二次开发

根据向导安装SolidWorks API SDK,在VC++中选择ATL COM Wizard创建动态链接库,加入相关代码,编译生成动态链接库 (*.DLL)文件。此方式可在SolidWorks插件管理器中生成插件,并以菜单形式自动添加在新建或打开的零件视图中,以完成特定功能。

1.3 用户自定义向导和用现有的实例进行二次开发

启动VC,选择Custom AppWizard寻找现成的文件以生成新的工程。若不想用向导,直接修改现有实例也是一种方法。使用此法可在SolidWorks的菜单栏中出现新下拉菜单用以完成用户新添加的功能。

2 二次开发应用

以某零件参数化建模二次开发为例,介绍Solid-Works二次开发过程。

(1)安装VC++并配置开发环境。利用Solid-Works提供的二次开发模板创建工程。为确保包含必要的头文件,完全按照第一种方法配置开发环境。

(2)绘制零件模板。模板零件的创建方法与一般三维模型的建模方式相同,但须注意以下几点:①在对模板进行特征造型时,对二维截面轮廓,利用尺寸标注和施加相切、共线等关系实现对几何图形的全约束。②正确设置控制三维模型的设计参数。尺寸参数可分为两种:一是与其他参数无关的独立参数;另一种是与其他参数有关的非独立参数。前者主要用来控制三维模型的几何尺寸和拓扑关系,后者可以用独立参数为自变量的关系式表示。③正确建立设计参数与三维模型尺寸变量之间的关联。主要有两种方法:一是在创建模型模板需要输入数值时,直接输入参数名。二是利用SolidWorks的关系式功能创建新的关系式,使系统自动创建的约束参数名与设计参数关联。

(3)VC++编程步骤。①利用SolidWorks提供的开发模板创建工程SWSD为工程名称。②在CLASSVIEW中分别为CSWSDAPP的成员函数doc-CreateMenu,docRemoveMenu添加代码实现为系统添加菜单:

③点击FILEVIEW在SWSD.def文件里声明导出函数。DLL中包含一个导出函数表,可以通过函数的符号化的名字或序号(可选)识别这些函数。函数表也包含了函数在DLL内的地址。当SolidWorks首先加载DLL时,它并不知道将要调用函数的地址,但知道符号名和序号。动态连接过程后,在DLL中建立一张客户调用与函数地址的表,把SolidWorks的调用与DLL中函数的地址连接起来。④在SWSD.h中对导出函数声明。⑤在SWSD.cpp文件里添加导出函数的函数体,这个函数就是用户开发的菜单所调用的执行函数,在这个导出函数里添加具体的代码可以实现开发人员需要程序执行的功能。

(4)编译。由于SolidWorks不再支持加载调试软件版本,因此,用户不能用"Win32 Debug"或"Win32 MBCS Debug"调试模式。为了调试代码,用户必须使用"Pseudo Debug"调试模式。此模式需要链接适当的MFC Release库,否则SolidWorks运行时可能会和已加载的MFC库发生资源冲突。

(5)应用程序的运行。如果应用程序是以DLL方式建立,则运行步骤如下:运行SolidWorks程序,选择File-Open并改变打开文件类型到ADD-Ins(.DLL)。选取预定的DLL,则用户应用程序加入到SolidWorks。

如果用户想在VC调试模式下运行SolidWorks,这种方式适合进行代码的调试:在用户的VC开发环境中,选择GO编译。在弹出的对话框中键入Solid-Works.EXE及其路径名。一旦SolidWorks运行,选择File-Open并改变打开文件类型到ADD-Ins(.DLL),选择要调试的DLL,则用户应用程序加入到SolidWorks。

(6)注册。有两种方式可以把用户开发的模块添加到注册表里面,使SolidWorks可以自动找到二次开发的模块:①在VC++开发环境中,利用SolidWorks提供的二次开发模板创建工程时,VC++提示是否把该工程添加到注册表里时,选择“是”。②当更换系统或在其他计算机中安装开发的新模块的时候,可以在工程文件夹内找到*.reg的一个注册表文件,双击就可以把这个模块的信息写入注册表。

4 结束语

介绍了在VC++集成开发环境下通过动态链接库DLL调用SolidWorks API函数进行二次开发实现机械零件参数化设计的方法。可以参考该方法对Solid-Works进行其他较为复杂的二次开发工作,建立适合用户需要的、专用的SolidWorks功能模块。通过实例表明,基于DLL的SolidWorks二次开发可以很好实现与SolidWorks系统的无缝集成,并且操作简单,能满足用户开发三维CAD系统的需要。

[1] 殷国富,尹湘云,胡晓兵.SolidWorks二次开发实例精解.北京:机械工业出版社,2006.

[2] 刘 毅,辛选荣,刘 汀.基于实例的挤压模具CAD系统的开发.锻压装备与制造技术,2006,41(2):94-97.

猜你喜欢

注册表二次开发菜单
浅谈基于Revit平台的二次开发
中国新年菜单
浅谈Mastercam后处理器的二次开发
更上一层楼 用好注册表编辑器
西门子Easy Screen对倒棱机床界面二次开发
本月菜单
基于Pro/E二次开发的推土铲参数化模块开发
一个“公海龟”的求偶菜单
学习器揭开注册表面纱
软件不能运行,注册表中找根源