CATDrawing内にある点を一括で補助エレメントに変換するマクロ|CATIAマクロの作成方法

今回はお問い合わせより頂いた内容です。
送って頂いた内容は以下のようなマクロです。

CATIA Drawingの図面内にある“点オブジェクトを一括で補助エレメント”
マクロで変換することは可能でしょうか?

 

マクロの機能

今回作成したマクロは
『アクティブビュー内にある”すべての点”を一括で補助エレメントに変換するマクロ』です。

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

  マクロの機能まとめ ・アクティブビュー内にある全ての点を補助エレメントに変換する
・すでに補助エレメントになっている点はそのまま変更しない

手動でいうと「点をダブルクリックして開かれる[点を定義]ウィンドウ内の[補助エレメント]にチェックを付ける」という操作です。

 

サンプルコード

マクロのサンプルコードは以下のとおりです。
実行するとアクティブビュー内にある全ての点を補助エレメントに変換されます。

※使用言語が英語の場合はSearchメソッドの内容を書き換える必要があります。
 詳しくはSelectionオブジェクトのSearchメソッドの項を参照下さい。

 

コード解説

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

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

アクティブドキュメント/アクティブシート/アクティブビューの定義

アクティブドキュメント、アクティブシート、アクティブビューを順に定義します。
これらはCATDrawingマクロでのほぼ定型文的な内容なので丸暗記でもいいレベルです。
 

アクティブビュー内の点(Point)を全選択

先ほど定義したアクティブビュー「ActView」内にある点をすべて選択状態にします。
(以降で選択中のオブジェクトに対してループ文で1つずつ処理していくため)

「CATIA.RefreshDisplay=False」はExcelマクロでいう「Application.ScreenUpdating=False」で、処理中に画面の更新を抑える働きをしてくれます。これにより処理速度を少し上げることができます。
  

選択中のすべての点を補助エレメントに変換

最後にループ文を使って点を1つずつ順に補助エレメントに切り替えていきます。

CATDrawing上の点はVBAでは「Point2Dオブジェクト」として扱います。
ヘルプ(リンク先)を確認するとわかりますが、Point2Dオブジェクトにはメソッドしか書かれていません。これらは点の座標を取得/変更するためのメソッドで補助エレメントに切り替えるものは存在しません。

しかし、VBE上のローカルウィンドウを確認すると「Construction」というプロパティが確認できます。これは「Geometry2Dオブジェクト」の通常エレメントと補助エレメントを表すBoolean型のプロパティです。

Constructionプロパティでは通常エレメントは「False」補助エレメントが「True」を表します。
そのため以下のように書くことで点を補助エレメントに変換することができます。

 icon-code Constructionプロパティ 

ActPoint.Construction = True

 
ちなみに「Geometry2Dオブジェクト」は2Dエレメント全般を取り扱うオブジェクトなので、「Line2D」や「Circle2D」などが包含されています。そのため上記コードの「Point2D」を「Line2D」や「Circle2D」に書き換えればCATDrawing内の直線や円を補助エレメントに変換することができます。(もちろんSearch部分を変える必要もありますが)

 

まとめ

今回は「CATDrawing内にある点を一括で補助エレメントに変換するマクロ」の紹介でした。

いろいろ書いてきましたが、お問い合わせの内容に対して一言で答えるのであれば
「Geometry2DオブジェクトのConstructionぷプロパティを使う」です。

Geometry2DやAnyObjectのように複数のオブジェクトを包含しているオブジェクトも多くあるので、今回紹介したようにVBEのローカルウィンドウもうまく使いつつマクロの作成をしていくことをオススメします。
 

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

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

CATIA, CATIAマクロ, VBA

Posted by Lic