前言:本文主要探讨如何通过宏将零件下的所有Body或者自选的Body批量生成Product的思路。同时,进一步探讨代码的优化方法,希望对大家有所帮助。
0视频演示
高清视频请访问如下链接查看:
https://pan.baidu.com/s/1Y64J7Zh1Y--ZuOcnFPaokA
1目录
0. 视频演示
1. 目录
2. 编程思路
3. 如何获取装配下的指定对象
4. 如何创建装配文档
5. 如何对窗口排序
6. 如何选择粘贴的模式
7. 如何实现装配子集间Body的复制
8. 如何实现全选Body和自选Body
9. 如何解决装配重名的问题
10. 如何过滤掉PartNumber中不需要的字符
11. 详细代码
12. 参考资料
2编程思路
首先我们设计如下窗体,用于交互:
接下来,我们为这个窗体添加相应的功能就可以了。
从零件的Body创建Product大概的思路为:
1)获取到零件下的Body特征
2)用Selection方法复制Body
3)获取到装配下的PartDocument 的Part特征
4)用Selection 方法粘贴Body
5)尽可能多的考虑其他Error情况,提前规避
如下的代码就能实现从零件的Body创建Product,这是我已经简化过的核心代码,本文的代码都是在这个基础上增加其他功能演变而来的:
3如何获取装配下的指定对象
获取到Product下的Body的代码为:
CATIA.ActiveDocument.Product.Products.Item(1).ReferenceProduct.Parent.Part.Bodies.Item(1).Shapes.Item(1)
这句里面有两个关键属性,ReferenceProduct和parent的概念,理解了这两个属性,那么对于装配下如何获取指定对象基本就有思路了。
ReferenceProduct是Product的属性,parent就是它的父级。
4如何创建装配文档
查询V5Automation.chm手册,得到如下信息:
所以很容易就得到了,新建一个装配文档的方法:
Set oPartDoc = CATIA.ActiveDocument
Set oProductDoc = CATIA.Documents.Add("Product")
5如何对窗口排序
查询V5Automation.chm手册,得到如下信息:
所以很容易就得到了,新建一个对窗口进行垂直排序的方法:
CATIA.Windows.Arrange catArrangeTiledVertical
CATIA.Windows.Item(1).Activate
6如何选择粘贴的模式
查询V5Automation.chm手册,得到如下信息:
所以很容易就得到了,按照结果进行选择性粘贴的方法:
CATIA.ActiveDocument.Selection.PasteSpecial
"CATPrtResultWithOutLink"
7如何实现装配子集间Body的复制
我们可以先利用上面的知识做一个简单的实例,如下图,将Product下第1个Product里的Body复制到第二个Product中
这里重点强调下,更新是个问题。目前想出来的一种方法,大家可以参考下:
CATIA.Documents.Item(CATIA.ActiveDocument.Product.
Products.Item(2).ReferenceProduct.Parent.Name).Part.Update
8如何实现全选Body和自选Body
使用For...Next进行遍历,当然也可以用For obody in Each Bodies.
全选的代码如下:
我们可以使用with ...End with 来优化代码,至少目前我所看到的墙外大佬的代码,with的使用基本是家常便饭了。不管书写、阅读还是修改起来也方便很多,让我想起了学Python的时候,一直强调的优雅两个字,扯远了。
9如何解决装配重名的问题
我们都知道,在CATIA DesignMode下同时出现两个相同PartNumber的文件,CATIA会提示报错,要求重命名。
但是Body名称重名这个是允许的。如果我们想让生成的Product下的零件的PartNumber和Body的名称相同的话,要解决重名的问题,否则要么名称不变,要么就容易产生Error.
这里分享一种思路,供大家参考。我在做的时候,先遍历检查Part中的Body名称,如果有重名,那么就在名称后加Rename&i进行区分,这样生成的Product就不会有重名了。代码如下:
10如何过滤掉PartNumber中不需要字符
在进行设计后的数据交换时,为了轻量化,很多人习惯使用如下装配模式下的从装配生成零件的命令,如下所示:
细心的话,会发现,我们生成的零件文档里的Body名称是这样的:
11详细代码
>>>窗体代码:
>>>模块代码
>>>初始化CATIAPart
>>>打开文件对话框选择文件
>>>自定义拷贝Part下的Body生成Product
>>>拷贝Part下的所有Body生成Product
本文涉及到的模型和代码请访问如下链接下载:
https://pan.baidu.com/s/1wem8c4ZTCwVf3C8VywgSmw
提取码:0o5c
12参考资料
1.V5Automation.chm帮助文档
2. Eng-tips论坛资料
https://www.eng-tips.com
3.3D模型来源于网络。
教程来自慧舟软件
PLM应用工程师
伍松 提供