登录

行业资讯

SOLIDWORKS强大功能—宏(二)

SOLIDWORKS强大功能—宏(二)

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


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

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

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

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

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

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


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

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


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


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

在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装配体结构遍历的一些分享,希望能够帮助大家。


鑫辰信息科技(深圳)有限公司专注于Solidworks代理商,SolidWorks深圳代理,SolidWorks经销商等

免责声明: 八方资源网为互联网信息服务提供者,所有的信息均有发布者提供,如您发现信息有违规/侵权,请立即投诉举报

相关资讯

查看更多
资讯分类
商务服务 污水处理 机械 传媒 机床 五金 农业 工程机械 焊接切割 泵阀 热泵 农机 汽车 汽车用品 汽配 汽修 通信 电子 暖通空调 电气 广电 印刷 纸业 丝印特印 灯饰 安防 消防 过滤 耐火材料 环保 LED 添加剂 食品机械 仪器仪表 太阳能 包装 水工业 加工 二手设备 工艺礼品 古玩 服装 美容美发 服饰 制鞋 家电 家具 运动休闲 影音 酒店 家居 办公 音响灯光 农化 水果 养殖 皮具 教育装备 玩具 零食 食品 二手 IT 建材 小家电 卫浴 陶瓷 超硬材料 化工 橡胶 塑料 钢铁 表面处理 冶金 石油 能源 纺织 房地产 皮革 涂料 石材 创业 项目 生活服务 教育 船舶 维修 广告 交通运输 医疗 代理 物流 图片 展会 咨询 库存积压
八方资源网 资讯