您的位置:网站首页 > Solidworks

Visual C++对SolidWorks的二次开发方法

时间:2010-06-02 08:00:00 来源:
副标题#e#

   1前言
   
    为了缩短产品开发周期、提高市场竞争能力 ,各企业在产品设计中大多要对通用 CAD 软件进行二次开发 ,建立适合自己的专用模块。但目前所开发的 CAD 系统 ,一般是对二维绘图软件如 AutoCAD 进行二次开发 ,实现机械零件参数化设计。由于二维绘图软件本身无法实现参数化驱动 ,所以对其进行二次开发的周期长、工作量大、不易实现 CAX系统的集成。而三维绘图软件如 SolidWorks ,采用特征建模、参数化驱动可方便地设计出三维实体模型。利用三维实体模型可以自动生成二维工程图;可以在生产之前动态模拟装配过程、进行干涉检查;可以对重要零部件进行有限元分析与优化设计(CAE) ;可以模拟数控加工(CAM) ;可以生成零件的工艺规程(CAPP) ,这样就易于实现 CAX系统的集成。所以基于三维绘图软件的二次开发必将成为今后 CAD 技术发展的主流。
   
    本文将讨论在 Visual C++6. 0 的集成开发环境下 ,对 SolidWorks 进行二次开发实现机械零件参数化设计的方法 ,并结合实例说明二次开发的具体实现过程。
   
    1 SolidWorks 二次开发的原理
   
    1. 1 SolidWorks 的 API 接口

   
    SolidWorks 通过 OLE(Object Linking and Embedding ,对象的链接和嵌入) 技术为用户提供了强大的二次开发接口 API(Application Programming Interface ,应用程序界面) ,API 中包含了数百个可以在 Visual Basic、VBA(Excel 、Access 等) 、C、C++ 或 SolidWorks 宏文件调用的函数。SolidWorks API 接口采用面向对象的方法 ,所有的函数都是有关对象的方法或属性。用户通过对这些对象属性的设置和方法的调用 ,就可以在用户自己开发的程序中对 SolidWorks 进行各种操作控制 ,完成零件草图的绘制和修改;零件各种特征的建立和修改;零件的特征信息、装配信息及工程图纸信息的提取等。
   
    1. 2 SolidWorks 二次开发的方法

   
    SolidWorks 的API 接口分为两种:一种是基于 OLE Automation 的 IDispatch 技术 ;另一种开发方式是基于 Windows 基础的 COM(Object Model ,组件对象模型) 。
   
    基于 OLE Automation 的 IDispatch 技术作为快速开发的手段 ,一般常用于 VB、Delphi 编程语言的接口 ,通过 IDispatch 接口暴露对象的属性和方法 ,以便在客户程序中使用这些属性并调用它所支持的方法。此种技术只能开发 EXE形式的程序 ,所开发的 CAD 系统不能直接加挂在 SolidWorks 系统界面下 ,无法实现与 SolidWorks 系统的集成。
   
    COM 是一种组件开发技术 ,是 Microsoft 公司提出的并被大多数公司支持的一种标准协议 ,它建立了一个软件模块同另一个软件模块的连接 ,当这种连接建立之后 ,两个模块之间就可以通过接口来进行通讯。COM接口更为简洁高效 ,这种技术可以使用最多的 SolidWorks API函数。实际上 SolidWorks 系统本身是用 VC++编写的 ,所以使用 VC++语言通过 COM 接口开发 ,可以实现对 SolidWorks 底层的开发并且代码的执行效率高。
   
    通过 VC编写基于 COM的动态连接库 DLL(Dynamic Link Library)文件 ,能直接在 SolidWorks 的界面下添加菜单、工具条等 ,如图 1 所示。在注册表中注册成功即可成为 SolidWorks 的插件 ,实现了与 SolidWorks 的无缝集成 ,是众多二次开发方法中的首选 ,以下结合参数化设计铜合金轴承保持架挤压模垫套的实例 ,介绍 DLL 程序的开发方法。
   
    2 DLL 程序的具体实现过程
   
    2. 1 DLL 的创建

   
    SolidWorks 公司提供了制作 DLL 文件的向导 ,利用向导模板可方便快捷地生成 DLL 文件。具体步骤是:首先从 SolidWorks 公司的网站下载制作动态连接库的向导文件"SWizard. awx",将其拷贝至 VC++安装目录下的 Common MSDev98 Template 文件夹 ,这时 VC 新建工程项中会出现"SolidWorks Add InAppWizard"向导。选择此向导输入项目名 3DCAD 后单击 Next ,在 Step 1 of 2 选择 SolidWorks 的安装路径 ,除了 Overload WNDPROC of ModelView复选框 ,选中其他所有复选框 ,然后单击 Next 进入 Step 2 of 2 ,选中 Create Sample Feature Manager 和 ViewRegister Add - In at compile time 复选框后单击 Finish 即可完成DLL 工程的创建。
   
    2. 2 DLL 中添加资源的方法

   
    在动态链接库中 ,当用户需要添加自己的资源如对话框时 ,应明确指出在什么时候使用自己的资源 ,否则 SolidWorks 系统分不清那些是由系统控制的资源 ,那些是由用户控制的资源 ,会发生冲突导致程序运行错误。避免资源冲突的方法是在使用自己资源前调用 Afx Get Resource Handle 函数保存当前的资源 ,然后调用 Afx Set Resource Handle 函数把当前资源设置成新的资源 ,当使用完自己的资源后 ,再调用Afx Set Resource Handle 函数恢复先前已保存的资源。创建本程序的运行界面时 ,首先用对话框编辑器创建对话框模板资源 ,如图 2 所示加入所需控件 ,再用 Class wizard 为对话框生成 CTestDlg类(基类为 CDialog) ,并加入所需的成员变量 ,相关代码如下:
   
    / / 保存当前系统资源
    HINSTANCE saver = AfxGetResourceHandle() ;
    / / 把当前资源设置成新的资源
    AfxSetResourceHandle(AfxGetResourceHandle() ) ;
    CDlg1 dlg ; / / 声明一个对话框类
    If (int n = dlg. DoModal () = = IDOK) ; / / 按下绘图按钮后绘图


    {
    drawdt( ) ; / / 参数化绘制垫套三维图的自定义函数
    }
    / / 恢复先前已保存的系统资源的句柄
    AfxSetResourceHandle(saver) ;