我能够编写递归子程序,循环遍历所有几何图形集和有序几何图形集,因为每个GS和OGS下都有一个集合,分别用于HybridBodies和OrderedGeometricalSets。但是,当我找到Part-Level(根级)实体时,其中没有Bodies集合。因此,当我在一个体内有一个多个聚合布尔运算体的模型时,我无法在VBA,C#.net或VB.net中的标准集合操作中找到它们。
如何在身体内找到这些身体?
答案 0 :(得分:0)
这需要一段时间来弄清楚,我肯定会在网上发布它,因为它几乎没有记录。
Bodies自动化的问题在于所有实体存储在零件级别集合中。起初我没有看到,因为在使用CATIA规范树导航时我习惯了几何集和OGS递归。
但所有主体存储在根级别集合中这一事实实际上更多的是障碍而非利益,因为它不允许递归循环。
我尝试使用选择对象搜索来查找聚合体,但是它太麻烦而且很麻烦。
确定Body是否通过另一个Body中的布尔实体操作聚合的最佳解决方案是使用“InBooleanOperation”方法。这不是很好的记录,这就是我在这里发布它的原因。
它返回一个简单的true或false。像这样:
Body CurB = MyBodies.Item(x);
Boolean InBoolOpp = CurB.InBooleanOperation;
if (InBoolOpp == false)
{
// Code here
}
至于找到嵌套Body的父级,我还没想出来,但是我会在发布之后发布它。
答案 1 :(得分:0)
你是对的,所有的身体都被视为在规范树的根部。在VBA中,您可以选择一个实体,然后搜索其中的实体。因此,首先使用.InBooleanOperation属性来查看正文是否位于树的根部...如果是,请选择它并使用下面的代码搜索其他正文。
Dim oPartDoc as PartDocument
Set oPartDoc = CATIA.ActiveDocument
Dim oPart as Part
set oPart = oPartDoc.part
Dim oSelection as Selection
Set oSelection = oPartDoc.Selection
Dim cBodies as New Collection
Dim oBody As Body
Set oBody = oPart.Bodies.Item(1)
oSelection.Clear
oSelection.Add oBody 'Add the body to the selection object
oSelection.Search "Type=Body,sel" 'Search in the selected object
'All bodies in the selected body are added to the selection object
'Loop through selected bodies and add to collection
For i = 1 to oSelection.Count
cBodies.add oSelection.Item(i).Value
Next