ご質問頂いたもののサンプルです。
指定した形状セット内のサーフェスのみ、緑色に変更します。
特に記述する事もない為、ソースコードです。
'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度だけ行っても、全てに反映されます。