2014-11-24 53 views
2

我能够编写循环遍历所有几何集和有序几何集的递归子例程,因为每个GS和OGS下面分别有一个用于HybridBodies和OrderedGeometricalSets的集合。但是,当我找到部分级别(根级别)的机构时,其中没有Bodies集合。所以,当我有一个包含多个集合布尔运算Bodies的模型时,我无法在VBA,C#.net或VB.net的标准集合操作中找到它们。如何从CATIA API中的CATPart获取聚合的实体?

我怎样才能找到身体内的这些身体?

回答

0

这花了一段时间才弄清楚,我肯定会把它发布到网络上,因为它几乎没有记录。

机构自动化的问题是全部机构存储在零件级集合中。起初我没有看到,因为在使用CATIA spec树形导航时,我习惯了几何集和OGS递归。

但是,全部机构存储在根级别集合中的事实实际上更多是一种障碍而非益处,因为它不允许递归循环。

我试图使用选择对象搜索来查找聚集的物体,但它太麻烦了,并且很麻烦。

确定Body是否通过另一个Body中的布尔实体操作进行聚合的最佳解决方案是使用“InBooleanOperation”方法。这没有很好的记录,这就是为什么我在这里发布。

它返回一个简单的真或假。就像这样:

  Body CurB = MyBodies.Item(x); 
      Boolean InBoolOpp = CurB.InBooleanOperation; 
      if (InBoolOpp == false) 
      { 
        // Code here 
      } 

作为认定嵌套机构的家长,我还没有想出来,但我会后一旦我做的。

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 
+0

强烈建议不要使用选择对象,除非绝对必要。它慢了1000倍,几乎可以使用所有的处理器。 – 2016-10-13 20:53:01

+0

我完全同意,如果您找到其他解决方案,我会很乐意听到。 – Lardman363 2017-11-11 14:09:41

+0

是的,我发布它作为上面的答案。 – 2017-11-13 07:17:51