選択したボディー内の履歴をすべて表示するマクロ|CATIAマクロの作成方法

今回はお問い合わせより頂いた内容です。

複数のボディを選択して、ボディにぶら下がっているパッド等の履歴自体の非表示を表示に出来るマクロ。
ボディにぶら下がっている履歴(パッド等)の表示非表示判定せずに、
選択したボディはすべて表示にさせるイメージです。

処理の内容はかなりシンプルなのでマクロ初心者の方でも理解しやすい内容となっています。

 

マクロの機能

今回作成したマクロは「選択したボディー内の履歴をすべて表示するマクロ」です。

具体的な機能は以下のとおりです。

  マクロの機能まとめ ・選択したボディー内の履歴コマンドをすべて表示化する
・ボディーはマクロ実行前に選択しておく必要あり
・選択するボディーは1個以上であれば何個でも可
・ボディー以外のオブジェクトが選択されている場合はマクロを中断

 

サンプルコード

マクロのコードは以下のとおりです。
ボディーを選択した状態でコードを実行すると、選択したボディー内の履歴がすべて表示されます。

Sub CATMain()
    
  'アクティブドキュメント確認
    If TypeName(CATIA.ActiveDocument) <> "PartDocument" Then
        MsgBox "CATPartで実行してください"
        Exit Sub
    End If
    
  'Selection定義
    Dim sel As Selection
    Set sel = CATIA.ActiveDocument.Selection
    
    If sel.Count = 0 Then
        MsgBox "ボディーを1つ以上選択して下さい。"
        Exit Sub
    End If
    
  'VisPropertySet定義
    Dim vps As VisPropertySet
    Set vps = sel.VisProperties
             
  '選択されたボディーをCollectionに格納
    Dim SELCollection As Collection
    Set SELCollection = New Collection
    
    Dim i As Integer
    For i = 1 To sel.Count
        SELCollection.Add sel.Item(i).Value
        If TypeName(SELCollection.Item(i)) <> "Body" Then
            MsgBox "ボディー以外のオブジェクトが選択されています" & vbLf & _
                   "ボディーのみを選択してください。"
            Exit Sub
        End If
    Next i
    sel.Clear
    
    CATIA.RefreshDisplay = False
    
  'ボディー内のShapeをすべて表示
    Dim j As Integer
    For i = 1 To SELCollection.Count
        For j = 1 To SELCollection.Item(i).Shapes.Count
        
            sel.Add SELCollection.Item(i).Shapes.Item(j)
            vps.SetShow catVisPropertyShowAttr
        
            sel.Clear
        Next j
    Next i
    
    CATIA.RefreshDisplay = True

End Sub

 

コード解説

アクティブドキュメント確認

  'アクティブドキュメント確認
    If TypeName(CATIA.ActiveDocument) <> "PartDocument" Then
        MsgBox "CATPartで実行してください"
        Exit Sub
    End If

まず、はじめにアクティブドキュメントの定義をします。
今回のマクロはCATPartでのみ有効なものなので、アクティブドキュメントがCATPart以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
 

SelectionとVisPropertySetの定義

  'Selection定義
    Dim sel As Selection
    Set sel = CATIA.ActiveDocument.Selection
    
    If sel.Count = 0 Then
        MsgBox "ボディーを1つ以上選択して下さい。"
        Exit Sub
    End If

  'VisPropertySet定義
    Dim vps As VisPropertySet
    Set vps = sel.VisProperties

SelectionオブジェクトVisPropertySetオブジェクトの定義を行います。

はじめにSelectionオブジェクトを定義します。
今回は事前にボディーが選択されていることが前提のマクロなので、ここで選択されているオブジェクトの数を調べ、0個の場合はマクロを終了するようにしています。

マクロ実行後にユーザーにボディーを選択させたい場合は、SelectionオブジェクトのSelectElement2メソッドもしくはSelectElement3メソッドを使うことで、ユーザー選択のフェーズが設けられます。

つぎにVisPropertySetオブジェクトの定義をします。
VisPropertySetオブジェクトはオブジェクトの色や透明度などのグラフィックプロパティを取り扱うためのオブジェクトです。今回は選択したオブジェクトを"表示化"するために利用します。
  

選択されたボディーをCollectionに格納

  '選択されたボディーをCollectionに格納
    Dim SELCollection As Collection
    Set SELCollection = New Collection
    
    Dim i As Integer
    For i = 1 To sel.Count
        SELCollection.Add sel.Item(i).Value
        If TypeName(SELCollection.Item(i)) <> "Body" Then
            MsgBox "ボディー以外のオブジェクトが選択されています" & vbLf & _
                   "ボディーのみを選択してください。"
            Exit Sub
        End If
    Next i
    sel.Clear

選択されたボディーを1つのCollectionにまとめて格納します。
(Collectionに格納する理由は選択しているオブジェクトを一時保管する方法を参照下さい)

このときTypeName関数を使って、選択されているオブジェクトに"Body"以外があった場合にはマクロを中断するようにしています。(今回は中断させていますが、TypeNameの結果が"Body"だった場合のみCollectionに入れるという処理にすれば、Body以外のオブジェクトを選択されていたとしてもエラー無く実行することができます)
 

ボディー内のShapeをすべて表示

 'ボディー内のShapeをすべて表示
    Dim j As Integer
    For i = 1 To SELCollection.Count
        For j = 1 To SELCollection.Item(i).Shapes.Count
        
            sel.Add SELCollection.Item(i).Shapes.Item(j)
            vps.SetShow catVisPropertyShowAttr
        
            sel.Clear
        Next j
    Next i

最後にCollectionに格納されているボディーの履歴をすべて表示させます。

ボディー内の履歴はVBAでは「Shapeオブジェクト」にまとまっていします。(Sketchは除く)
つまりボディー内の「Shapesオブジェクト」の数だけループを回し、「Shapeオブジェクト」を1つずつ「選択→表示」としていけばすべての履歴(Shape)を表示化することができます

 

まとめ

今回は「選択したボディー内の履歴をすべて表示するマクロ」についての内容でした。

処理自体はかなり単純で、重要なのは「空のシートをどのようにして判定するか」の部分だけです。

今回のマクロではオブジェクトの数で空のシートを判定しましたが、その他の方法もいくつかあると思うのでサンプルコードはあくまでも参考程度にご利用下さい。
 

サンプルマクロ集に戻る
目次へ戻る
 

icon-book CATIAマクロを本気で勉強するなら

2024年8月26日CATIA,CATIAマクロ