基于SolidWorks尺寸驱动建模的二次开发

2014-11-19 吴志林 南京理工大学机械工程学院

  阐述了SolidWorks二次开发原理,提出了基于零件尺寸遍历的尺寸驱动建模二次开发方法并详细论述了开发思路。以VBA为开发工具,运用SolidWorks API技术,实现了此方法在SolidWorks 中的应用。该方法对传统的尺寸驱动建模进行了改进,使尺寸驱动建模具有普遍适用性,可大大提高产品设计效率。

  引言

  SolidWorks 是一款优秀的三维工程软件,因其操作简单、功能强大、具有很好的开放性和兼容性而为广大机械设计工程师所接受。但SolidWorks 毕竟是国外软件,与我国国家标准在很多方面有所不同,多年来,针对SolidWorks 软件的二次开发工作从未间断。

  在系列零件设计及形状相似的模型建模方面,传统的SolidWorks 的二次开发主要有两种:一是使用系列零件设计表;二是定制尺寸驱动窗体。这两种方法都有其不足之处:系列零件设计表需要设计者先输入大量特定的尺寸数据,使用时若表中没有需要的系列,仍需要对模型进行重新建模;定制尺寸驱动窗体只针对某特定形状的零件,不具有普遍性,例如,定制的平键尺寸驱动窗体只能在平键建模时使用,螺栓建模时将无法使用。

  本文以SolidWorks 自带的VBA 为开发工具,提出了基于SolidWorks 尺寸驱动建模的二次开发方法,该方法与定制尺寸驱动窗体有相似之处,但在模型针对性方面做了改进,使尺寸驱动建模具有普遍性。任何在设计时标注了尺寸的模型,都可以使用该方法轻松快速地实现模型尺寸数据更改,从而帮助设计者大大提高工作效率。

1、开发原理

  SolidWorks 二次开发主要通过其内嵌的API(Application Programming Interface,应用程序接口)进行,任何基于Windows 系统,支持OLE(Object Linking and Embedding,对象链接与嵌入)技术的编程软件,如VB、Delphi、VBA、C、VisualC++等都可以对SolidWorks 进行二次开发。API 就像一个暗盒,设计者只需要在程序中为API 提供相应的参数,API 函数就能输出相应的结果,而无需理会API 内部的工作方式。开发时,开发者要找到完成所需功能的API 函数,了解该函数的参数含义,从而完成二次开发。

  Solidworks API 对象是一个自上而下的多层次的树形网络。如图1 所示,Sldworks 是根目录对象,位于应用程序的底层,是访Solidworks API 所有对象的入口程序。接口对Solidworks API 的调用实行逐级寻访,先调用能实现所需功能对象的父对象,然后调用与父对象相关的子对象,如果子对象所封装的属性和方法不能实现所需要的功能,则继续调用该子对象的下级子对象,如此逐级遍历,直到结束[5]。So1idworksAPI 父对象与子对象是包含关系,不是继承关系,父对象包含子对象的属性和方法,子对象自身不带有该属性和方法。二次开发中,如果没有按规则进行API逐级调用,将无法实现所需功能。本文所做二次开发主要用到了ModelDoc2 对象的特征管理子对象Feature 对象和尺寸管理子对象Parameter 对象。

2、开发思路

  用户在SolidWorks 建模过程中标注的尺寸,SolidWorks 会自动为其生成在该零件中惟一的尺寸名称。特征树中零件特征分为二维特征“草图x”和三维特征“拉伸x/切除x/旋转x 等”两类(x 为数字,下同)。每次执行由二维草图生成三维特征的操作时,SolidWorks 通常仅自动生成一个三维尺寸名称,一般为“D1@拉伸1”、“D1@旋转1”的形式;二维草图中的尺寸数量则由设计者标注的多少决定,例如用户在“草图2”中标注了三个尺寸,则SolidWorks 为三个尺寸生成的名称分别为“D1@草图2”、“D2@草图2”和“D3@草图2”。因此,通过遍历零件特征读取各个特征包含的尺寸数目,就可以在程序中还原尺寸数据名称,然后为各个尺寸赋值,重建模型。

Solidworks对象模型

图1 Solidworks对象模型

尺寸驱动建模开发流程

图2 尺寸驱动建模开发流程

  尺寸驱动建模开发流程如图2 所示,启动SolidWorks 后,判断是否有零件被打开。如果有,则获得当前零件的名称,供遍历特征及尺寸驱动建模时使用;如果没有,提示用户打开零件。程序获得零件名称之后,开始对零件的特征树进行遍历。

  因为特征树中“备注”、“注解”、“光源”、“材质”、视图基准面、“原点”等特征不具备尺寸特征,API 遍历特征树的顺序又为从上到下依次进行,且零件特征紧接“原点”特征之下,所以遍历过程中判断当前特征是否为“原点”,如果为“原点”,则在下一次的遍历中开始遍历零件的各个特征及特征所包含的尺寸数目。遍历特征并判断该特征包含尺寸数目时,通过判断“选择尺寸时返回值是否为真”来实现。例如,零件模型特征树中有“草图1”,“草图1”中含有x 个用户标注的尺寸,程序通过循环,从选择“D1@草图1”开始判断选择“Dy@草图1”时返回值的真假,当1≤y≤x 时,返回值为真,说明尺寸存在,当y=x+1 时返回值为假,说明尺寸不存在,并停止在“草图1”特征的尺寸遍历,从而获得“草图1”包含的尺寸数目。遍历出各个特征所包含的尺寸数目之后,分别将其存储于数组,然后根据各个特征的名称及所包含的尺寸数目,动态加载尺寸驱动窗体,并在窗体上显示每个尺寸名称及相应的尺寸数据输入框。用户输入相应尺寸的数值并确定,程序即可通过调用Solidworks API函数,自动完成尺寸驱动建模。

4、结束语

  本文指出了传统的基于SolidWorks 对系列零件及形状相似、尺寸不同的零件模型二次开发方面存在的不足,提出了基于SolidWorks 尺寸遍历的尺寸驱动建模二次开发方法。运用SolidWorks API 技术,以SolidWorks 自带VBA 为开发工具,实现了该方法在SolidWorks 中的应用,使得尺寸驱动建模能够针对任何模型方便地进行尺寸数据的更改,适用性得到了极大的提高,这对提高产品设计效率,缩短产品设计周期具有重要意义。