サーフェスと線類が混在し選択された状態で別々の色を付けたい と
昨年末辺りでご相談頂いていたのですが、遅くなりました。
CATIAの場合は色を変更する為には一度選択状態にする必要がありますが、
一辺にサーフェスと線類を別々に色付けする事は出来ません。
その為、サーフェスのみ 線類のみ の選択状態にする必要があります。
'catvba Option Explicit Sub CATMain() '準備 Dim doc As PartDocument Set doc = CATIA.ActiveDocument Dim sel As Selection Set sel = doc.Selection sel.Clear Dim pt As Part Set pt = doc.Part '一個目の形状セット Dim hyBdy As HybridBody Set hyBdy = pt.HybridBodies.Item(1) '選択処理を軽くするための魔法 'http://catiadoc.free.fr/online/interfaces/interface_Application.htm#HSOSynchronized CATIA.HSOSynchronized = False '意図的に形状セット内の全GSD要素を選択 Dim entity As AnyObject For Each entity In hyBdy.HybridShapes sel.Add entity Next '---本題はここから--- 'HybridShapeFactory取得 'http://catiadoc.free.fr/online/interfaces/interface_HybridShapeFactory.htm#GetGeometricalFeatureType Dim hyFact As HybridShapeFactory Set hyFact = pt.HybridShapeFactory '選択要素からHybridShapeFactoryでジオメトリのタイプを '判断し選択から外す 'For文は逆順に行わないとインデックスがズレます 'Surfaceは5です Dim idx As Long Dim geoType As Long For idx = sel.Count2 To 1 Step -1 'idx番目のジオメトリのタイプを取得 geoType = hyFact.GetGeometricalFeatureType(sel.Item(idx).Reference) 'サーフェス以外は選択を解除する If Not geoType = 5 Then Call sel.Remove(idx) End If Next 'この時点でサーフェスのみが選択状態になっている '色を変更する為のVisPropertySetを取得 'http://catiadoc.free.fr/online/interfaces/interface_VisPropertySet.htm Dim vis As VisPropertySet Set vis = sel.VisProperties 'SetRealColorの引数はR,G,Bで '4番目は良く分かってません(以前教わったような気はしてます) '赤色に変更してます Call vis.SetRealColor(255, 0, 0, 1) sel.Clear '無駄ですが、もう一度形状セット内の全GSD要素を選択 For Each entity In hyBdy.HybridShapes sel.Add entity Next '選択要素からHybridShapeFactoryでジオメトリのタイプを '判断し選択から外す 'Curveは2 Lineは3 Circleは4です For idx = sel.Count2 To 1 Step -1 'idx番目のジオメトリのタイプを取得 geoType = hyFact.GetGeometricalFeatureType(sel.Item(idx).Reference) 'サーフェス以外は選択を解除する Select Case geoType Case 2, 3, 4 '何もしない Case Else Call sel.Remove(idx) End Select Next 'この時点で線のみが選択状態になっている '緑色に変更してます Call vis.SetRealColor(0, 255, 0, 1) sel.Clear End Sub
形状セット内にはサーフェスと線が1個づつですが、全ての色を変更します。
実行前は左で実行後は右です。
上記にSetRealColorで4番目の引数について
'SetRealColorの引数はR,G,Bで '4番目は良く分かってません(以前教わったような気はしてます)
と記載していますが、こちらのサイトではより詳しく記載されています。
VisPropertySetオブジェクト|CATIAマクロの作成方法 | LiCLOG
助かります。