Search code examples
vbacatia

How to get Body Color in CATIA VBA macro?


Is it possible to read the color of a CATBody? Something like:

   For Each myBody In myPart.Bodies
             myColor = myBody.Color 
    Next

Solution

  • Yes, It's possible, but not exactly straight forward. The Color is available through VisProperties via a Selection. Also, this is one of those weird cases with the Catia API where you need to use late binding(I can't tell you why)

    Here's an example:

    Option Explicit
    Sub BodyColors()
    
    Dim sel As Selection
    Dim selected As SelectedElement
    Dim vis As Variant 'VisPropertySet 'This must be variant for late binding. Otherwise you get an error.
    Dim RGB(3) As Long 'or you can use an array
    Dim r, g, b As Long
    
    
    Dim myPart As Part
    Dim myBody As Body
    
    Set myPart = CATIA.ActiveDocument.Part
    Set sel = CATIA.ActiveDocument.Selection
    For Each myBody In myPart.Bodies
        sel.Clear
        sel.Add myBody
        Set vis = sel.VisProperties
        vis.GetRealColor r, g, b 'you must pass the values into the function
        Debug.Print myBody.Name & ": "; r & "," & g & "," & b
    Next
    sel.clear
    End Sub