老哥学习网 - www.lg9.cn 2024年05月17日 22:53 星期五
当前位置 首页 >情感故事 >

【基于SolidWorks尺寸驱动建模的二次开发】revit 二次开发参数化建模

发布时间:2019-04-16 06:39:33 浏览数:

  摘 要: 阐述了SolidWorks二次开发原理,提出了基于零件尺寸遍历的尺寸驱动建模二次开发方法并详细论述了开发思路。以VBA为开发工具,运用SolidWorks API技术,实现了此方法在SolidWorks中的应用。该方法对传统的尺寸驱动建模进行了改进,使尺寸驱动建模具有普遍适用性,可大大提高产品设计效率。
  关键词: 尺寸遍历; 尺寸驱动; VBA; 二次开发
  中图分类号:TP391 文献标志码:A 文章编号:1006-8228(2013)01-14-03
  Secondary development of dimension-driven model construction based on Solidworks
  Wu Zhilin, Zhang Kaihuan
  (School of Mechanical Engineering, Nanjing University of Science and Technology, Nanjing, Jiangsu 210094, China)
  Abstract: The basic principles of secondary development of SolidWorks are introduced. A dimension-driven and dimension-traversal method of building models is proposed. Using VBA as the development tool,this method is achieved based on SolidWorks API technology. The traditional secondary development of SolidWorks is improved based on dimension-driven model which makes the modeling process easier and improves the efficiency of product design.
  Key words: dimension-driven; dimension- traversal; VBA; secondary development
  0 引言
  SolidWorks是一款优秀的三维工程软件,因其操作简单、功能强大、具有很好的开放性和兼容性而为广大机械设计工程师所接受。但SolidWorks毕竟是国外软件,与我国国家标准在很多方面有所不同,多年来,针对SolidWorks软件的二次开发工作从未间断。
  在系列零件设计及形状相似的模型建模方面,传统的SolidWorks的二次开发主要有两种:一是使用系列零件设计表;二是定制尺寸驱动窗体[1-2]。这两种方法都有其不足之处:系列零件设计表需要设计者先输入大量特定的尺寸数据,使用时若表中没有需要的系列,仍需要对模型进行重新建模;定制尺寸驱动窗体只针对某特定形状的零件,不具有普遍性,例如,定制的平键尺寸驱动窗体只能在平键建模时使用,螺栓建模时将无法使用。
  本文以SolidWorks自带的VBA为开发工具,提出了基于SolidWorks尺寸驱动建模的二次开发方法,该方法与定制尺寸驱动窗体有相似之处,但在模型针对性方面做了改进,使尺寸驱动建模具有普遍性。任何在设计时标注了尺寸的模型,都可以使用该方法轻松快速地实现模型尺寸数据更改,从而帮助设计者大大提高工作效率。
  1 开发原理
  SolidWorks二次开发主要通过其内嵌的API(Application Programming Interface,应用程序接口)进行,任何基于Windows系统,支持OLE(Object Linking and Embedding,对象链接与嵌入)技术的编程软件,如VB、Delphi、VBA、C、Visual C++等都可以对SolidWorks进行二次开发[3]。API就像一个暗盒,设计者只需要在程序中为API提供相应的参数,API函数就能输出相应的结果,而无需理会API内部的工作方式。开发时,开发者要找到完成所需功能的API函数,了解该函数的参数含义,从而完成二次开发。
  Solidworks API对象是一个自上而下的多层次的树形网络。如图1所示[4],Sldworks是根目录对象,位于应用程序的底层,是访问Solidworks API所有对象的入口程序。接口对Solidworks API的调用实行逐级寻访,先调用能实现所需功能对象的父对象,然后调用与父对象相关的子对象,如果子对象所封装的属性和方法不能实现所需要的功能,则继续调用该子对象的下级子对象,如此逐级遍历,直到结束[5]。So1idworks API父对象与子对象是包含关系,不是继承关系,父对象包含子对象的属性和方法,子对象自身不带有该属性和方法。二次开发中,如果没有按规则进行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”。因此,通过遍历零件特征读取各个特征包含的尺寸数目,就可以在程序中还原尺寸数据名称,然后为各个尺寸赋值,重建模型。   尺寸驱动建模开发流程如图2所示,启动SolidWorks后,判断是否有零件被打开。如果有,则获得当前零件的名称,供遍历特征及尺寸驱动建模时使用;如果没有,提示用户打开零件。程序获得零件名称之后,开始对零件的特征树进行遍历。因为特征树中“备注”、“注解”、“光源”、“材质”、视图基准面、“原点”等特征不具备尺寸特征,API遍历特征树的顺序又为从上到下依次进行,且零件特征紧接“原点”特征之下,所以遍历过程中判断当前特征是否为“原点”,如果为“原点”,则在下一次的遍历中开始遍历零件的各个特征及特征所包含的尺寸数目。
  遍历特征并判断该特征包含尺寸数目时,通过判断“选择尺寸时返回值是否为真”来实现。例如,零件模型特征树中有“草图1”,“草图1”中含有x个用户标注的尺寸,程序通过循环,从选择“D1@草图1”开始判断选择 “Dy@草图1”时返回值的真假,当1≤y≤x时,返回值为真,说明尺寸存在,当y=x+1时返回值为假,说明尺寸不存在,并停止在“草图1”特征的尺寸遍历,从而获得“草图1”包含的尺寸数目。
  遍历出各个特征所包含的尺寸数目之后,分别将其存储于数组,然后根据各个特征的名称及所包含的尺寸数目,动态加载尺寸驱动窗体,并在窗体上显示每个尺寸名称及相应的尺寸数据输入框。用户输入相应尺寸的数值并确定,程序即可通过调用Solidworks API函数,自动完成尺寸驱动建模。
  3 开发示例
  ⑴ 建立尺寸驱动窗体,如图3所示。需指出的是,本文是在VBA环境下进行的二次开发,VBA不支持控件数组,所以要事先在窗体中建立足够多的控件,程序运行时再由尺寸数量决定显示多少组控件。当然,VBA与VB极其相似,用户还可以在VB环境中进行二次开发,或者在VBA环境中编写类模块实现控件数组功能,但这些不是本文重点,在此不再赘述。
  ⑵ 主程序关键代码。
  Public swApp As SldWorks.SldWorks
  Public swmodel As SldWorks.ModelD-oc2
  Public k As Integer
  Sub main() ‘主程序过程
  Dim swFeature As SldWorks.Feature
  …… ‘省略一般变量声明
  j=1
  Set swApp=Application.SldWorks ‘建立SolidWorks对象
  swApp.SetUserPreferenceToggle swShowDimensionNames, True
  ‘在零件模型中点击草图时,显示尺寸名称。这样做是为了在草图尺寸数目较多的情况下,方便用户查阅尺寸名称所对应的零件特征尺寸。
  If Not swApp Is Nothing Then
  Set swmodel=swApp.ActiveDoc ‘获得当前活动文档。
  If swmodel=Nothing Then
  ‘判断是否有文档被打开
  MsgBox "请先打开零件。"
  Exit Sub
  ‘如果没有零件被打开,跳出过程。
  End If
  str=swmodel.GetTitle
  ‘获得当前活动文档的零件名称,尺寸驱动建模时会用到该字符串变量。
  If Not swmodel Is Nothing Then ‘如果当前有文档被打开,开始遍历。
  Set swFeature=swmodel.FirstFeature
  ‘获得特征树中的第一个特征。
  While Not swFeature Is Nothing
  ‘如果特征存在,判断特征类型。
  Featname=swFeature.Name ‘获得特征名称。
  If Featname="原点" Then
  bltz=True
  ‘只有bltz为true时,才会遍历特征所包含的尺寸数。
  GoTo tiaozhuan
  ‘“原点”特征无尺寸,可以直接遍历下一特征。
  End If
  i=1 ‘从“D1@特征x”开始遍历。
  bl=True ‘为选择尺寸的返回值赋初始值,启动循环。
  If bltz=True Then
  While bl ‘bl值为true时,即尺寸存在时循环。
  str1="D" & i ‘生成尺寸名称字符串。
  bl=swmodel.Extension.SelectByID2(str1 & "@" &
  Featname &"@"&str&".SL-DPRT","DIMENSION",
  0.015427,0.03894,0.006118,False,0,Nothing,0)
  ‘当尺寸被选择,即尺寸存在时,bl值为true,进行下一次遍历。
  i=i+1
  Wend
  a(j)=i-2 ‘记录第j个特征包含尺寸数目,便于在尺寸驱动窗
  体中还原尺寸名称。
  b(j)=Featname ‘记录第j个特征的特征名称,便于在尺寸
  驱动窗体中还原尺寸名称。
  j=j+1
  End If
  tiaozhuan:
  Set swFeature=swFeature.GetNextFeature
  ‘获得下一个特征。
  Wend
  End If
  For i=1 To j-1
  k=k+a(i)
  ‘获得尺寸数目的总数。
  Next
  Frm1.Show 0   ‘加载非模态的窗体。当模型的尺寸较多时,只有当尺寸驱动窗体为非模态,用户才可以查看尺寸名称对应的模型特征;若窗体为模态的,窗体将显示在Solidworks界面的最前端,且在窗体卸载之前,SolidWorks无法响应窗体以外的任何操作。
  End If
  End Sub
  ⑶ 尺寸驱动窗体代码。
  Private Sub UserForm_Initialize() ‘窗体初始化。
  ……
  ‘省略变量声明声明及控件位置调整部分,该部分用户可根据控件大小自行调整。
  For i=30 To k+1 Step-1
  Frm1.Controls("label" & i).Visible=False
  Frm1.Controls("textbox" & i).Visible=False
  ‘根据尺寸的总数目决定显示多少组标签及文本框,本程序预置了30组,用户可以根据需要增加或减少。
  Next
  n=1
  For i=1 To j-1
  For m=1 To a(i)
  Frm1.Controls("label" & n).Caption="D" & m & "@" & b(i)
  ‘使用标签显示尺寸名称。
  n=n+1
  Next
  Next
  For i=1 To k
  strb(i)=Frm1.Controls("label" & i).C-aption
  sng(i)=swmodel.Parameter(strb(i) & "@" & str).SystemValue
  Frm1.Controls("textbox" & i).Text=sng(i)*1000
  ‘在文本框中显示相应的尺寸数值,供用户输入新数值时参照。
  Next
  End Sub
  Private Sub Cmd1_Click()
  …… ‘省略声明部分。
  For i=1 To k
  strb(i)= Frm1.Controls("label" & i).C-aption
  ‘获得尺寸名称并赋值于数组。
  Next
  For i=1 To k
  swmodel.Parameter(strb(i) & "@" & str).SystemValue=
  Val(Frm1.Controls("text-box" & i).Text)/1000
  ‘将相应文本框中的数值赋值于相应尺寸。
  Next
  swmodel.EditRebuild
  ‘重建模型。
  Set swmodel=Nothing
  ‘释放对象型变量。
  Set swApp=Nothing
  Unload Frm1 ‘卸载窗体。
  End Sub
  ⑷ 程序运行示例如图4所示。对比程序运行前界面图3可以看出,程序运行时,会根据零件的特征树(图4上部分)自动生成相应的尺寸驱动窗体(图4下部分),使用户对模型的更改变得非常方便。
  4 结束语
  本文指出了传统的基于SolidWorks对系列零件及形状相似、尺寸不同的零件模型二次开发方面存在的不足,提出了基于SolidWorks尺寸遍历的尺寸驱动建模二次开发方法。运用SolidWorks API技术,以SolidWorks自带VBA为开发工具,实现了该方法在SolidWorks中的应用,使得尺寸驱动建模能够针对任何模型方便地进行尺寸数据的更改,适用性得到了极大的提高,这对提高产品设计效率,缩短产品设计周期具有重要意义。
  参考文献:
  [1] 张莉.基于solidworks平台的二次开发技术[J].计算机时代,2003.10:31-32
  [2] 江有永,曾忠,范卫高,曹志全.标准件库的表格化制作[J].机械制造,2003.41(464):26-27
  [3] 徐国权,黄志超.基于SolidWorks的参数化设计二次开发研究[J].机械设计与研究,2007.23(1):68-70
  [4] Solidworks公司.Solidworks API二次开发[M].机械工业出版社,2005.
  [5] 吕晓燕,贾海英,张晓钟.基于VB对SolidWorks二次开发方法的研究[J].机械设计与制造,2005.3:114-116

推荐访问:建模 尺寸 驱动 solidworks

相关文章:

Top