CATIA VBA二次开发教程|使用零件的Body生成Product

发布时间:2019-02-01 10:44:26

前言:本文主要探讨如何通过宏将零件下的所有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应用工程师

伍松 提供


[返回列表]

上一篇:汽车零部件行业的工艺数字化解决方案

下一篇:DELMIA — 产线仿真