マテリアルの名称をオブジェクト名に追記するマクロ|CATIAマクロの作成方法

今回の記事は「マクロ案」より頂いた内容です。
送って頂いた内容は以下のようなマクロです。

ワークベンチ: パートデザイン

マクロ案:
 ボディやサーフェスの名称の後ろに、割り当てられたマテリアル名を一括で追記したい。
  ”ボディ1″→”ボディ1_metal”
  ”ボディ2″→”ボディ2_wood”
  ”サーフェス1″→”サーフェス1_stone”

今回のマクロで重要なのは「マテリアルが適用されているオブジェクト」をどうやって取得するかです。マテリアルに関しては「Parent」で適用されているオブジェクトが取得できるわけではないので、少しだけ厄介ですが方法がないわけではないでそちらを紹介していきます。

 

マクロの機能

今回作成したのはマテリアルの名称をオブジェクト名に追記するマクロです。
具体的な機能は以下のとおりです。

  マクロの機能まとめ ・マテリアルの名称をオブジェクト名に追記するマクロ
  (パラメータ「マテリアル」の値をオブジェクト名に追記する)
・マテリアルが適用されている全オブジェクトが対象
 

サンプルコード

マクロのコードは以下のとおりです。
英語環境の場合はコードを少し書き換えないとエラーが発生するので注意してください。

 

コード解説

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

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

アクティブドキュメントが定義できたら、「Partオブジェクト」と「Selectionオブジェクト」を定義します。また、あわせて以降のループ処理で使うカウント変数として「i」「j」も用意しておきます。
 

マテリアルパラメータをすべて取得

つぎにマテリアルパラメータを取得し、「parms」というコレクションに全て格納します。
(参照:選択しているオブジェクトを一時保管する方法)

ここではドキュメント内にある「マテリアル」という名称のパラメータを全て取得しにいきます。
そのためマテリアルのパラメータ以外に「マテリアル」という名称のパラメータが存在しているとうまく実行できない可能性があるので注意しましょう。
 

オブジェとマテリアル名の組み合わせをすべて取得

つぎに前項で取得した「parms」をもとに、それぞれのパラメータに対する「マテリアルが適用されているオブジェクト」「マテリアルの名称」を取得しにいきます。「マテリアルが適用されているオブジェクト」は「objs」、「マテリアルの名称」は「material_names」に格納していきます。

マテリアルが適用されているオブジェクトは、パラメータの名前から取得していきます。
パラメータの名前はVBAで取得すると「Part1¥パーツボディー¥マテリアル」のように取得されます。

本コードでは、このパラメータの名前を「¥」で分割(Split)して、仕様ツリーの上から順に名称検索をかけてオブジェクトを取得しています。(※この部分は処理に時間がかかるため、もう少しいい方法があるかもしれません。)

例えば「Part1¥パーツボディー¥マテリアル」の場合は「パーツボディー」にマテリアルが適用されているということがわかるので、「Part1」の中の「パーツボディー」というように上から順にマテリアルが適用されているオブジェクトを取得しにいっています。

オブジェ名にマテリアルを追加

最後にオブジェクト名にマテリアル名称を追加していきます。
これまでの処理から、名称を変更するオブジェクトは「objs」、追加するマテリアルの名称は「material_names」に格納されています。

これらのコレクション内でループをすれば、対象オブジェクトの名称を変更することができます。

 

まとめ

今回はマテリアルの名称をオブジェクト名に追記するマクロについての内容でした。

今回のマクロで重要なポイントは「マテリアルが適用されているオブジェクトの取得方法」と「マテリアル名称の取得方法」の2点です。

「マテリアルが適用されているオブジェクトの取得方法」はパラメータの名称(ex. Part1¥パーツボディー¥マテリアル)から取得することができ、「マテリアル名称の取得方法」は単純に「マテリアルパラメータ.Value」で取得することができます。この2点が取得できればあとは名称を変更するだけです。
 

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

 

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

CATIA, CATIAマクロ, VBA

Posted by Lic