设为首页 | 加入收藏 | 联系我们 | 内部邮箱

基于SolidWorks二次开发的变量化三维建模方法

时间:2015-06-17 10:36来源:未知 作者: 点击:
    SolidWorks是基于Windows平台的优秀三维设计软件,具有用户界面友好,上手快的优点,采用特征建模、变量化驱动可方便地实现三维建模、装配和生成工程图。SolidWorks软件本身所具有的交互方式,可以使用户对已生成模型的尺寸、几何轮廓和相互约束关系随时进行修改,而不需要编程,但要实现设计意义上的变量化绘图和系列化设计,需要建立设计计算获得的参数与三维图形之间的直接相关性,这是SolidWorks软件本身所无法实现的,所以要使SolidWorks在产品设计过程中充分有效地发挥作用,就需要对其进行专业化和本地化的二次开发工作。
    通过SolidWorks软件内嵌的应用程序接口(Application Programming Interface,API),可以对SolidWorks的设计参数百分之百进行修改,实现有效的二次开发,任何支持API的编程语言都可作为开发工具,如Visual C++,Visual Basic,Delphi等。
 
1 SolidWorks二次开发原理与思路
    1.1 二次开发原理
    对SolidWorks进行二次开发主要通过软件内嵌的API接口,该接口为用户提供了自由、开放、功能完整的开发工具,其中包含了大量的功能函数。用户借助高级编程语言作为开发平台,在设计友好操作界面的同时,通过在程序中调用API函数可以访问和操作SolidWorks,对SolidWorks进行各种操作控制,以实现产品三维模型的建立。
    SolidWorks所提供的各种API函数数以百计,这些API函数是对SolidWorks进行二次开发的基础,但是在用户利用编程语言开发自己的应用程序时,需要对这些API函数进行频繁调用,所以非常有必要利用API函数来生成成员函数,并封装为1个类,以简化程序的编写工作,该类能够控制SolidWorks进行各种操作,如启动、关闭、打开和关闭零件文件、修改草图和特征参数,以及模型重建、零部件装配等。
    1.2 二次开发思路
    通过编程调用API函数对SolidWorks进行二次开发通常有2种方式,一是完全编程的方式,即在编程环境中通过对API函数的调用,来实现在SolidWorks中进行建模所需要的全部操作,该方法使三维模型完全实现了参数驱动,但编程工作量大,开发效率低,对开发人员的要求也较高,二是采用SolidWorks建模与在编程环境中编程相结合的方法来实现对SolidWorks的二次开发,首先在SolidWorks中建立初始三维模型,确定具体设计变量;然后在程序中调用API函数,修改模型的设计变量并重建,以得到最终模型,在此方法中,模型的设计变量是程序与模型之间相联系的纽带,通过少量的变量化参数来控制模型,实现快速、准确的三维图形设计。
    相对于完全编程的方式,由于第二种方法将大部分的工作(即初始模型建立部分)转移到了相对简易的SolidWorks中进行,所以大大减少了相对繁琐的编程工作的工作量,提高了开发效率,本文中采用SolidWorks初始建模与VC抖编程相结合的方法,选定典型零件,按正确的设计关系在SolidWorks环境中绘制三维模型图形并保存,在三维建模过程中根据设计需要分析并确定模型的设计变量,然后通过编程环境编制程序,调用API函数打开已保存好的三维零件图形文件,修改其设计变量并重新生成模型,实现模型几何或拓扑信息的改变,从而完成零件的三维变量化建模过程。
 
2 SolidWorks二次开发过程
    以下通过对门式起重机端梁的变量化设计具体阐述基于Visual C++编程环境对SolidWorks的二次开发过程。
    2.1 在SolidWorks中建立三维模型
    首先在SolidWorks中进行零件建模,门式起重机端梁的结构比较简单,主要由上下盖板、主副腹板组成,在SolidWorks中,在右视基准面上建立草图,利用直线工具画出端梁截面草图,如图1所示,并通过“拉伸凸台/基体”命令,生成端梁的拉伸特征,创建的端梁三维模型如图2所示。


图1 端梁截面草图(单位:mm)


图2 端梁拉伸生成实体
 
    其次确定模型的设计变量,并添加必要的约束,在确定设计变量时应尽量减少变量的数目,并同结构设计计算所获得的变量保持一致,端梁的设计变量确定为6个,分别为盖板宽、盖板厚、腹板内侧间距、腹板外侧间距、腹板高、端梁长,模型中其他尺寸关系及相互间的约束均在SolidWorks建模过程中予以确定,如端梁须相对于中心线对称;对从属参数直接添加关系式方程(如图1中带“∑”符号的尺寸为已添加关系式方程的尺寸),使之与设计变量关联等。
------分隔线----------------------------