Productのパーツ番号をインスタンス名と同じにするマクロ|CATIAマクロの作成方法

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

(ワークベンチ)アセンブリデザイン ワークベンチ

(実施したいマクロ)
プロダクトを右クリックしてプロパティを見ますと
構成要素のインスタンス名が見る事が出来ます。
(プロダクトのパーツ番号も見る事もできます)
このインスタンス名をマクロで取得し
パーツ番号の名前にすることは可能でしょうか。

モデル上にある
全てのプロダクトをカウントして(親プロダクトにある子のプロダクトも含む)、
各プロダクトのインスタンス名を取得し各プロダクトのパーツ番号の名前にするマクロ作成は可能でしょうか。(理屈的にも可能なものなのでしょうか)

 

マクロの機能

今回作成したのはProductのパーツ番号をインスタンス名と同じにするマクロです。

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

  マクロの機能まとめ ・プロダクトのパーツ番号をインスタンス名にする
・アクティブドキュメント(CATProduct)内の全プロダクトに適用

 

サンプルコード

マクロのコードは以下のとおりです。

 

コード解説

アクティブドキュメント定義

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

つまり、アクティブドキュメントがCATProductの場合のみ変数「doc」にアクティブドキュメントを代入し、マクロの処理を続けます。
   

Selection定義

アクティブドキュメントが定義できたら、そのドキュメント内のSelectionを定義します。
この時、念の為「Clearメソッド」で現在の選択を全て解除しておきます。
  

Productをすべて取得

次にアクティブドキュメント内にあるProductを全て取得します。
「pros」というコレクションを用意して、その中に格納していきます。

Selectionオブジェクトの「Searchメソッド」を使って、ドキュメント内のProductを全て選択、選択状態のオブジェクトを全て「pros」に追加という処理を行うことで「pros」に全てのProductが格納されます。

このとき、ドキュメント内のProductを全て選択という処理を行うと、ドキュメント内の一番親のProduct(RootProductともいう)も選択状態になります。RootProductは無視したいので処理から除外するため、「Removeメソッド」を使ってあらかじめ選択を解除しておきます。
 

パーツ番号をインスタンス名に変更

最後に「pros」内ループを行い、パーツ番号をインスタンス名に変更していきます。

この時、Productの構成要素であるCATPartが表示モードだとエラーが発生します。
ただ、設計モードに切り替えると、データによっては処理に時間がかかってしまいます。

そこで、ここでは「デフォルトモード」に切り替えます。
デフォルトモードにはヘルプに下記のように書かれています。

The representation is in Default Work mode.Default mode is a mode where the Product Container is loaded. It’s an intermediate mode between Visualization Mode and Design Mode.

Default Work mode.Default modeで、Product Containerが読み込まれるモードです。
表示モードと設計モードの中間のモードです。

上記の通り、表示モードと設計モードの中間のモードです。
モードの切り替えは下記のようなコードで行うことができます。

 icon-code Productのモード切り替え

Productオブジェクト.ApplyWorkMode (モード)
 
※設計=DESIGN_MODE 表示=VISUALIZATION_MODE デフォルト=DEFAULT_MODE

モードを切り替えたら後はパーツ番号=インスタンス名とするだけです。

 

まとめ

今回はProductのパーツ番号をインスタンス名と同じにするマクロについての内容でした。
マクロではよくある”特定のオブジェクトを全て取得→ループ文で1つずつ処理する”というものです。

CATIAで特定のオブジェクトを一括で取得するには、今回のように「Selectionオブジェクト」の「Searchメソッド」を使うことが多いと思います。「Searchメソッド」はツリーの階層など関係無く取得できますし、「画面に表示されている」や「選択オブジェクトの子供」のような条件を追加することもできるため非常に扱いやすいのであわせて押さえておくことをお勧めします。
 

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

 

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

 

2021年3月27日CATIA, CATIAマクロ, VBA

Posted by Lic