SOLIDWORKS强大功能—宏(二)

蓝图分享网 2022-12-20 20:04:06 411阅读 0评论

之前的文章介绍了如何通过SOLIDWORKS正版软件的VBA来开发一个简单的标准件生成器;后面我们会对这个标准件生成器进行进一步功能扩充,今天我们来研究另一个问题:SOLIDWORKS装配体零件遍历。

SOLIDWORKS装配体零件遍历在二次开发中会经常使用,比如:

1.创建装配体结构BOM,搜索结构的所有层级,并提取每个结构、零件的属性信息;

2.在装配体中查找出所有的标准件、特定的零部件;

3.当装配体提示零件中存在被压缩的特征时,通过遍历找出被压缩特征的零部件;

4.遍历整个结构,为每个零件进行随机上色;

5.批量检查零件属性的完整性;

那么在SOLIDWORKS VBA开发中,如何对装配体结构进行完整的遍历呢?以下是对装配体遍历的基本流程:

SOLIDWORKS强大功能—宏(二) 第1张

首先用户需要先获取当前装配体结构的子组件,然后通过for循环遍历该结构的所有子组件,并且判断每个子组件是属于零件还是装配体,如果是装配体,则需要对该装配体进行子组件获取,然后检查该装配体的下属层级…如此往复;

但因为我们无法预先知道任何一个装配体结构存在多少个层级,所以也无法判断需要执行多少次for循环,所以我们在这里使用了递归的方式来处理该问题。

以下是装配体遍历的基本代码:

SOLIDWORKS强大功能—宏(二) 第2张

在main主函数中,我们通过 Set swmodel = swApp.ActiveDoc 获取到当前正在被SOLDWORKS打开且处于当前显示界面的装配体,通过 swmodelComps = swAsm.GetComponents(True) 或者这个装配体的所有子组件,放到swmodelComps 这个数组中;

接下来调用GetAsmChild这个函数,并且将swmodelComps数组作为变量传递到函数中;

在GetAsmChild函数中,通过:

For i = 0 To UBound(swmodelComps)

Next

语句对获取到的子组件数组进行遍历,该遍历只会搜索结构的一个层级,为了让遍历可以搜索结构的所有层级,所以有如下的条件判断代码:

If swmodel.GetType = 1 Then

MsgBox (swmodel.GetTitle)

ElseIf swmodel.GetType = 2 Then

swAsm = swmodel

GetAsmChild (swAsm.GetComponents(True))

End If

其中swmodel.GetType = 1 表示该获取到的一个层级中的其中一条子组件属于零件;

其中MsgBox (swmodel.GetTitle) 表示将该零件的名称进行显示;

重点在对子组件属于装配体的处理,在swmodel.GetType = 2 的条件(子组件属于装配体)中,我们做了如下操作:

GetAsmChild (swAsm.GetComponents(True))

可以看到这是一个函数调用,调用了什么函数呢?调用了GetAsmChild,这实际上是调用了它自身,这种调用函数自身的情况就叫做递归;

可以看到,虽然函数相同,但是前后两个GetAsmChild的变量却不同,第一次的GetAsmChild作为入口,传递的是我们打开的装配体文件的信息,第二次到第N次,传递的则是每一个子组件(子装配体)的信息,这样层层嵌套,最终实现装配体结构的整体的遍历。

以上是本次SOLIDWORKS VBA装配体结构遍历的一些分享,希望能够帮助大家。

免责声明:

1、本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

2、本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。

3、本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

4、侵权违法和不良信息举报 举报邮箱:cnddit@qq.com

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
验证码
评论列表 (暂无评论,411人围观)

还没有评论,来说两句吧...