我能够编写递归子例程,循环遍历所有几何集和有序几何集而不会出现问题,因为在每个 GS 和 OGS 下分别有一个用于 HybridBodies 和 OrderedGeometricalSets 的集合。但是,当我找到 Part-Level (Root-Level) Bodies 时,里面没有 Bodies 集合。因此,当我的模型在主体内具有多个聚合布尔运算主体时,我无法在 VBA、C#.net 或 VB.net 的标准集合操作中找到它们。
我怎样才能在一个身体内找到这些身体?
这需要一段时间才能弄清楚,我肯定会在网络上发布它,因为它几乎没有记录。
实体自动化的问题在于所有实体都存储在零件级集合中。起初我没有看到,因为在使用 CATIA 规范树导航时,我已经习惯了几何集和 OGS 递归。
但事实上,所有实体都存储在根级集合中,实际上是弊大于利,因为它不允许递归循环。
我尝试使用选择对象搜索来查找聚合体,但它太麻烦且太麻烦了,无法弄清楚。
确定一个实体是否通过布尔实体操作在另一个实体中聚合的最佳解决方案是使用“InBooleanOperation”方法。这没有很好的记录,这就是我在这里发布它的原因。
它返回一个简单的真或假。像这样:
Body CurB = MyBodies.Item(x);
Boolean InBoolOpp = CurB.InBooleanOperation;
if (InBoolOpp == false)
{
// Code here
}
至于查找嵌套 Body 的父级,我还没有弄清楚,但我会发布它。
您是对的,所有实体都被视为规范树的根部。在 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