基于Solidworks的零件参数化设计摘要:论述了利用VisualC++6.0对Solidworks进行二次开发的基本原理和一些关键技术,开发了可以与Solidworks无缝集成的动态链接库DLL,并且介绍了一个简单的应用实例的实现。0引言Solidworks是一款非常优秀的三维机械软件,其易学易用、全中文界面等特点深受广大工程技术人员喜欢。随着学习和使用Solidwork的人员越来越多,企业为了提高效率和市场竞争力,必然有快速开发新产品、形成自身产品特色的需求,而且对于一些存在着许多重复性的劳动的产品设计需要缩短产品的开发周期。因此有必要对SolidWorks进行二次开发,使其能够在输入少量变化参数的情况下迅速生成所有产品模型并装配,最终生成工程图。SolidWorks二次开发分两种,一种是基于OLEAutomation的IDispatch技术,一般常用于VisualBasic、Delphi编程语言的接口,通过IDispatch接口暴露对象的属性和方法,以便在客户程序中使用这些属性并调用它所支持的方法,此种技术只能开发EXE形式的程序,所开发的软件不能直接加挂在SolidWorks系统下,无法实现与SolidWorks的集成;另一种开发方式是基于COM的,这种技术可以使用最多的SolidWorksAPI(ApplicationProgrammingInterface,应用程序接口)函数。实际上SolidWorks本身就是用VisualC++编写的,所以使用VisualC++通过COM接口开发,可以实现对SolidWorks底层的开发并且代码的执行效率高。因为本文开发的是SolidWorksDLL(DynamicLinkLibrary,动态链接库)插件,故采用基于COM的开发方式。1SolidWorks二次开发原理1.1SolidWorksAPI中的术语COM(ComponentObjectModel,组件对象模型)技术是SolidWorksAPI的基础,COM对象是一种包含接口、属性和事件以对象形式封装的实体,它以接口的方式提供服务,这种接口是COM对象与使用COM对象的客户程序进行通信的唯一通道。OLE(ObjectLinkingandEmbedding,对象的链接和嵌入)可以使应用程序之间能够通过数据嵌入或链接的方式共享数据。它是SolidWorksAPI构造的基础,是深入理解SolidWorksAPI的关键。SolidWorksAPI是SolidWorks作为OLE自动化服务器提供的属性和方法,我们开发的插件就是使用这些接口的OLE客户。1.2开发工具VisualC++6.0SolidWorksAPI是基于COM组件技术构造的,SolidWorks通过COM技术为开发人员提供了强大的二次开发接口,因此VisualC++6.0作为当今最流行的软件开发工具之一,是程序员的首选编程利器。它提供了强大的集成开发环境,用以方便、有效地管理、编写、编译、跟踪C++程序,大大加速了程序员的工作,提高了程序代码的效率。使用VisualC++6.0进行SolidWorks二次开发的优势如下:可以使用GDI对象和设备环境类所提供的绘图函数,可以轻易的实现绘图功能而且无需考虑具体设备情况;VisualC++6.0开发环境十分友好,其高度的可视化开发方式和强大的向导工具能够帮助用户轻松的开发出多种类型的应用程序;VisualC++6.0有着强大的调试功能,能够帮助开发人员寻找错误和提高程序效率;VisualC++6.0和SolidWorks有极好的连接性,能够直接调用许多资源,方便的在SolidWorks上添加命令和各种控件。因此,可以说它是SolidWorks的最佳开发工具,适用于大型系统的开发,而在使用VisualC++6.0进行二次开发时的不足之处在于对开发人员的要求比较高。1.3SolidWorksAPI对象模型SldWorks对象是SolidWorksAPI对象模型中的最高层对象,它能够直接或间接地访问SolidWorksAPI中的所有其他对象。利用SldWorks对象可以实现应用程序的最基本操作,如生成、打开、关闭、结束文件、重排图标和窗口、设置当前的激活文件、生成属性定义,也可以对SolidWorks的系统变量进行设置。图1.SolidWorksAPI接口对象2SolidWorks二次开发的关键技术SolidWorks软件的COM接口支持使用VisualC++编程语言开发DLL(DynamicLinkLibrary,动态链接库)程序。DLL是一种用户模块,由用户自己开发的、可以加入到最终用户(包括用户本人和其他使用该模块的人)应用程序中提供某一特定功能的函数和类的集合。如SolidWorks系统自带的插件PhotoWorks、Animator等都是SolidWorks的动态链接程序库(.dll)。通过VisualC++编写基于COM的DLL程序,能直接在SolidWorks的界面下添加菜单、工具条等,在注册表中注册成功即可成为SolidWorks的插件,实现了与SolidWorks的无缝集成。2.1DLL的创建首先需要安装SolidWorks公司提供的SolidWorksAPISDK,可以从SolidWorks公司官方网站上下载与SolidWorks软件版本相对应的api_sdk.zip文件,安装好APISDK后才可以使用SolidWorksAPI接口的全部功能函数。然后启动VisualC++6.0,新建ATLCOMAppWizard工程,在类视图中新建一个ATLSolidWorks对象这样一个SwAddIn(SolidWork插件)对象就被插进工程中,并且取得了SolidWorksAPI的最高级对象SldWorks的控制指针。2.2DLL中添加资源的方法在动态链接库中,当用户需要添加自己的资源(如对话框)时,应明确指出在什么时候使用自己的资源,否则SolidWorks分不清楚哪些是由系统控制的资源,哪些是由用户控制的资源,会发生冲突,导致程序运行错误。避免资源冲突的方法是在使用自己的资源之前调用AfxGetResourceHandle函数保存当前的资源,然后调用AfxSetResourceHandle函数把当前资源设置成新的资源,当使用完自己的资源后,再调用AfxSetResourceHandle函数恢复先前已保存的资源。创建本程序的运行界面时,首先用对话框编辑器创建对话框模板资源,加入所需控件,再用ClassWizard为对话框生成CMainDlg(基类为CDialog),并加入所需的成员变量。2.3DLL与SolidWorks的集成用户可以通过DLL程序定制SolidWorks的菜单、工具栏资源等,从而实现二次开发的软件与SolidWorks的无缝集成,以下为部分代码://在SolidWorks主窗口添加菜单type=swDocNONE;position=3;menu.LoadString(IDS_MYADDIN_VC_MENU);m_iSldWorks-AddMenu(type,menu,position,&retval);//添加次级菜单position=-1;menu.LoadString(IDS_MENU_INSERTSKH_ITEM);method.LoadString(IDS_MENU_INSERTSKH_METHOD);hint.LoadString(IDS_MENU_INSERTSKH_HINT);m_iSldWorks-AddMenuItem2(type,m_swCookie,menu,position,method,update,hint,&ok);3二次开发实例本实例使用SolidWorksAPI实现了直齿圆柱齿轮的参数化设计。使用方法:首先将生成的DLL插件装载到SolidWorks中,然后新建一个零件文件,选择【配置】|【齿轮】命令如图2所示,图2.选择【齿轮】命令弹出齿轮参数对话框,在其中输入齿轮参数,如图3所示图3.输入齿轮参数生成的齿轮模型如图4所示。图4生成的齿轮4结束语本文介绍了在VisualC++6.0的集成开发环境下通过动态链接库DLL对SolidWorks进行二次开发实现机械零件参数化设计的方法。通过实例说明基于SolidWorks二次开发可以很好地实现零件参数化设计,同时利用动态链接库实现与系统的无缝集成,操作简单,能满足用户开发三维CAD系统的需要。