CATDrawing内にある点を一括で補助エレメントに変換するマクロ|CATIAマクロの作成方法
今回は「お問い合わせ」より頂いた内容です。
送って頂いた内容は以下のようなマクロです。
CATIA Drawingの図面内にある“点オブジェクトを一括で補助エレメント”に
マクロで変換することは可能でしょうか?
マクロの機能
今回作成したマクロは
『アクティブビュー内にある”すべての点”を一括で補助エレメントに変換するマクロ』です。
具体的な機能は以下のとおりです。
・すでに補助エレメントになっている点はそのまま変更しない
手動でいうと「点をダブルクリックして開かれる[点を定義]ウィンドウ内の[補助エレメント]にチェックを付ける」という操作です。
サンプルコード
マクロのサンプルコードは以下のとおりです。
実行するとアクティブビュー内にある全ての点を補助エレメントに変換されます。
※使用言語が英語の場合はSearchメソッドの内容を書き換える必要があります。
詳しくはSelectionオブジェクトのSearchメソッドの項を参照下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
Sub CATMain() 'アクティブドキュメント確認 If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "CATDrawingのみ対応のマクロです。" Exit Sub End If 'アクティブドキュメント定義 Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument 'アクティブシート定義 Dim ActSheet As DrawingSheet Set ActSheet = doc.Sheets.ActiveSheet 'アクティブビュー定義 Dim ActView As DrawingView Set ActView = ActSheet.Views.ActiveView 'Selection定義 Dim sel As Selection Set sel = doc.Selection 'アクティブビュー内の点(Point)を全選択 CATIA.RefreshDisplay = False With sel .Clear .Add ActView .Search ("ドラフティング.点,sel") '使用言語が英語の場合は書き換える必要あり End With '選択中のすべての点を補助エレメントに変換 Dim i As Integer Dim ActPoint As Point2D For i = 1 To sel.Count Set ActPoint = sel.Item(i).Value ActPoint.Construction = True '補助エレメントに変換 Next i sel.Clear CATIA.RefreshDisplay = True End Sub |
コード解説
アクティブドキュメント確認
1 2 3 4 5 |
'アクティブドキュメント確認 If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "CATDrawingのみ対応のマクロです。" Exit Sub End If |
まず、はじめにアクティブドキュメントの定義をします。
今回のマクロはCATDrawingでのみ有効なものなので、アクティブドキュメントがCATDrawing以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
アクティブドキュメント/アクティブシート/アクティブビューの定義
1 2 3 4 5 6 7 8 9 10 11 |
'アクティブドキュメント定義 Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument 'アクティブシート定義 Dim ActSheet As DrawingSheet Set ActSheet = doc.Sheets.ActiveSheet 'アクティブビュー定義 Dim ActView As DrawingView Set ActView = ActSheet.Views.ActiveView |
アクティブドキュメント、アクティブシート、アクティブビューを順に定義します。
これらはCATDrawingマクロでのほぼ定型文的な内容なので丸暗記でもいいレベルです。
アクティブビュー内の点(Point)を全選択
1 2 3 4 5 6 7 8 9 10 11 |
'Selection定義 Dim sel As Selection Set sel = doc.Selection 'アクティブビュー内の点(Point)を全選択 CATIA.RefreshDisplay = False With sel .Clear .Add ActView .Search ("ドラフティング.点,sel") '使用言語が英語の場合は書き換える必要あり End With |
先ほど定義したアクティブビュー「ActView」内にある点をすべて選択状態にします。
(以降で選択中のオブジェクトに対してループ文で1つずつ処理していくため)
「CATIA.RefreshDisplay=False」はExcelマクロでいう「Application.ScreenUpdating=False」で、処理中に画面の更新を抑える働きをしてくれます。これにより処理速度を少し上げることができます。
選択中のすべての点を補助エレメントに変換
1 2 3 4 5 6 7 |
'選択中のすべての点を補助エレメントに変換 Dim i As Integer Dim ActPoint As Point2D For i = 1 To sel.Count Set ActPoint = sel.Item(i).Value ActPoint.Construction = True Next i |
最後にループ文を使って点を1つずつ順に補助エレメントに切り替えていきます。
CATDrawing上の点はVBAでは「Point2Dオブジェクト」として扱います。
ヘルプ(リンク先)を確認するとわかりますが、Point2Dオブジェクトにはメソッドしか書かれていません。これらは点の座標を取得/変更するためのメソッドで補助エレメントに切り替えるものは存在しません。
しかし、VBE上のローカルウィンドウを確認すると「Construction」というプロパティが確認できます。これは「Geometry2Dオブジェクト」の通常エレメントと補助エレメントを表すBoolean型のプロパティです。
Constructionプロパティでは通常エレメントは「False」、補助エレメントが「True」を表します。
そのため以下のように書くことで点を補助エレメントに変換することができます。
ActPoint.Construction = True
ちなみに「Geometry2Dオブジェクト」は2Dエレメント全般を取り扱うオブジェクトなので、「Line2D」や「Circle2D」などが包含されています。そのため上記コードの「Point2D」を「Line2D」や「Circle2D」に書き換えればCATDrawing内の直線や円を補助エレメントに変換することができます。(もちろんSearch部分を変える必要もありますが)
まとめ
今回は「CATDrawing内にある点を一括で補助エレメントに変換するマクロ」の紹介でした。
いろいろ書いてきましたが、お問い合わせの内容に対して一言で答えるのであれば
「Geometry2DオブジェクトのConstructionぷプロパティを使う」です。
Geometry2DやAnyObjectのように複数のオブジェクトを包含しているオブジェクトも多くあるので、今回紹介したようにVBEのローカルウィンドウもうまく使いつつマクロの作成をしていくことをオススメします。