C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

指定した形状セット内のサーフェスのみ、色を変更

ご質問頂いたもののサンプルです。

指定した形状セット内のサーフェスのみ、緑色に変更します。
特に記述する事もない為、ソースコードです。

'vba
'指定形状セット内にあるサーフェスの色を緑に変更
Sub CATMain()
    Call SurfaceChangeColorMain
End Sub

Sub SurfaceChangeColorMain()
    '準備
    Dim Doc As Document
    Set Doc = CATIA.ActiveDocument
    
    Dim Selection1 'As Selection
    Set Selection1 = Doc.Selection
    
    'ユーザー選択
    Dim InputObjectType(0) As Variant
    Dim SelectHybridBody As HybridBody
    InputObjectType(0) = "HybridBody"
    With Selection1
        .Clear
        Result = .SelectElement2(InputObjectType, "形状セットを選択して下さい // [Esc]=キャンセル", False)
        If Result = "Cancel" Then Exit Sub
        Set SelectHybridBody = .Item(1).Value
        .Clear
    End With
    
    'Partの取得
    Dim Part As Part
    Set Part = GetPart(SelectHybridBody)
    
    'HybridShapeFactory取得
    Dim HSFact As HybridShapeFactory
    Set HSFact = Part.HybridShapeFactory
    
    'サーフェスのみ選択
    Dim HShape As HybridShape
    For Each HShape In SelectHybridBody.HybridShapes
        If HSFact.GetGeometricalFeatureType( _
            Part.CreateReferenceFromObject(HShape)) = 5 Then
                Call Selection1.Add(HShape)
        End If
    Next
    
    '色の変更
    With Selection1
        Call .VisProperties.SetRealColor(0, 255, 0, 1)
        Call .Clear
    End With
End Sub

'Partの取得
Private Function GetPart(OJ As AnyObject) As Part
    If TypeName(OJ.Parent) = "Part" Then
        Set GetPart = OJ.Parent
    Else
        Set GetPart = GetPart(OJ.Parent)
    End If
End Function

・このマクロは、ProductでもPart単体でも実行可能です。

以前こちらにも記載したのですが、
色の変更や取得 - C#ATIA
色の変更の場合、1枚1枚設定することももちろん可能なのですが、
全てを選択状態にし、

        Call .VisProperties.SetRealColor(0, 255, 0, 1)

で1度だけ行っても、全てに反映されます。