Search code examples
vbacatia

How to get only root level bodies


do you have any suggestion how to select only bodies which are visible and in-root of part? For example i wish to get selected only Lens - Outer Headlamp - LH - Clear and Lens - Outer Headlamp - LH - Black from this structure:

enter image description here

I tried

Dim objPart As part
Dim objBodies As Bodies
Set objPart = CATIA.ActiveDocument.part
Set objBodies = objPart.Bodies

and value by objBodies.Count is 113, so i tried it by Search command directly in Catia and I'm not able to get only that two bodies. Do you have any ideas?


Solution

  • Finally I got the answer:

    Dim objPart As part
    Dim objBodies As Bodies
    dim rootBodiesCount as Integer
    Set objPart = CATIA.ActiveDocument.part
    Set objBodies = objPart.Bodies
    rootBodiesCount = getRootBodiesCount(objBodies)
    
    Function getRootBodiesCount(allBodies as Bodies) As Integer
      getRootBodiesCount = 0
      For i = 1 To allBodies.Count
        Dim inBool As Boolean: inBool = allBodies.Item(i).InVooleanOperation
        Dim visibility As Boolean: visibility = allBodies.Item(i).Visible
        If inBool = False Then
          If visibility Then getRootBodiesCount = getRootBodiesCount + 1
        End If
      Next
    End Function