三维机械设计软件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系统的需要。

SolidWorks二次开发的研究的更多相关文章

  1. 如何用Qt做SolidWorks二次开发

    这个问题困扰了我2年了,之前找到的教程都是MFC的,ATL导入向导或是通过导入类型库的方式来调用控件,我一直都搞不明白. 最近学习了ActiveQT以及通过ActiveQT控制EXCEL.Word.P ...

  2. 基于VB语言对SolidWorks参数化设计的二次开发

    0 引言 随着数字信息化进程的快速推进,如今三维CAD技术在越来越多的企业当中得到运用.为了降低在设计生产中的成本,缩短设计周期,增强企业竞争力,三维参数化技术随之应声,它凭借更贴近现代概念的设计以及 ...

  3. 研究QGIS二次开发笔记(一)

    为了在QT程序中嵌入一个地图,最终选择了QGIS来干这件事.选型阶段真是呵呵.我折腾的是QGIS2.4.0. 首先,到官方网站下载安装QGIS.如果你跟我一样懒的话,可能希望下载一个已经编译好的win ...

  4. visio二次开发——图纸解析

    (转发请注明来源:http://www.cnblogs.com/EminemJK/) visio二次开发的案例或者教程,国内真的非常少,这个项目也是花了不少时间来研究visio的相关知识,困难之所以难 ...

  5. 免费提供UG、ProE二次开发、定制化开发服务

    免费提供UG.ProE二次开发,定制开发服务. 拥有六年UG.ProE二次开发经验,相关项目经验. 从事过智能设计.计算机图形学相关研究. 联系方式: QQ:1787326383 微信号:begtos ...

  6. Revit二次开发-BIM模型导出

    最近一个月一直在研究Revit二次开发-BIM模型的导出,在网上找了很多相关资料学习.下面简单介绍一下我最近做的这个BIM模型的导出功能. 开始尝试使用Revit2015的样例程序里提供的读取模型几何 ...

  7. 最好最实用的PHP二次开发教程

    ◆二次开发 1.什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核. 2.为什么要二次开发? 随着信息化技术 ...

  8. E8.Net 工作流二次开发架构平台

    一.          产品简介 E8.Net工作流开发架构是基于微软.Net技术架构的工作流中间件产品,是国内商业流程管理(BPM)领域在.Net平台上的领先产品,是快速搭建流程管理解决方案的二次开 ...

  9. ODI KM二次开发手册

    ODI KM二次开发手册   分类: ODI(16) 目录(?)[+] 1 引言 1.1 编写目的 本手册面向的读者对象为具备数据集成业务知识及对ODI操作了解的开发人员,作为其完成基于ODI基础上K ...

随机推荐

  1. python学习,day1:循环判断基本语句的几个代码

    # coding=utf-8 # Author: RyAn Bi count = 0 '''while True : print('count:',count) count = count + 1 i ...

  2. Django-admin 的使用

    admin 组件的使用 Django 提供功能十分强大的后台管理组件 admin 来实现自动管理. admin 是一个组件,与 APP 一样,项目启动一开始就加载了.在 setting.py 中的 I ...

  3. sharepoint_study_2

    描述:向SharePoint中批量添加用户 解决:原文地址:http://bbs.winos.cn/thread-89236-1-1.html 一般情况下,要想登录SharePoint server ...

  4. 石头剪刀布(2019Wannafly winter camp day3 i) 带权并查集+按秩合并 好题

    题目传送门 思路: 按照题意描述,所有y挑战x的关系最后会形成一棵树的结构,n个人的总方案数是 3n 种,假设一个人被挑战(主场作战)a次,挑战别人(客场)b次,那么这个人存活到最后的方案数就是3n* ...

  5. HDU-6341 Problem J. Let Sudoku Rotate(dfs 剪枝)

    题目:有一个4*4*4*4的数独,每一横每一竖每一个小方块中都无重复的字母,即都为0-9,A-F..有一个已经填好的数独,若干个4*4的方块被逆时针拧转了若干次,问拧转回来至少需要多少次. 分析:很明 ...

  6. ThinkPHP5.0的助手函数汇总

    load_trait:快速导入Traits,PHP5.5以上无需调用 /** * 快速导入Traits PHP5.5以上无需调用 * @param string $class trait库 * @pa ...

  7. [转] Linux命令——timeout

    [From] https://blog.csdn.net/xiaqunfeng123/article/details/54315390 Linux命令——timeout 命令简介 运行指定的命令,如果 ...

  8. Linux误挂载到根目录出现问题!!!!!!!!!!!!!!!

    一.背景: 因根目录/空间不大,故而想将另一硬盘挂载到根目录下(后发现此想法很是幼稚): 二.过程: 1.成功输入命令挂载后,发现出现/上被挂了两个东西,且/下剩余空间还是原来一样大,才发现大错特错: ...

  9. Qt客户端阿里云服上传文件

    整体原理: 阿里云提供了c程序上传文件到阿里云服务器的sdk工具包,将这个工具包继承在自己的客户端,调用接口即可实现上传文件. 前期准备: 1.阿里云c程序客户端的sdk,下载地址:https://h ...

  10. stream3

    import java.util.function.Consumer; import java.util.function.IntConsumer; public class ConsumerTest ...