繁体   English   中英

如何从CATIA API中的CATPart获取聚合的实体?

[英]How do I get the Aggregated Bodies from a CATPart in CATIA API's?

我能够编写循环遍历所有几何集和有序几何集的递归子例程,因为在每个GS和OGS下分别有一个HybridBodies和OrderedGeometricalSets的集合。 但是,当我找到零件级(根级)实体时,其中没有Bodies集合。 因此,当我有一个在体内具有多个聚合布尔运算实体的模型时,我无法在VBA,C#.net或VB.net的标准集合操作中找到它们。

我如何在体内找到这些身体?

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

实体自动化的问题是所有实体都存储在零件级集合中。 一开始我没有看到它,因为在使用CATIA规范树导航时,我习惯了几何集和OGS递归。

但是, 所有主体都存储在根级别集合中的事实实际上是一个障碍,而不是一个好处,因为它不允许进行递归循环。

我试图使用选择对象搜索来找到聚合的物体,但是它太小且麻烦,无法弄清楚。

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

它返回一个简单的true或false。 像这样:

            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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM