CATPart内のワイヤー形状をCATDrawingに投影するマクロ|CATIAマクロの作成方法

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

件名 :3Dデータの図面化マクロの記事を希望します。

メッセージ本文 : 
今、標記記載のマクロを作れないかと奮闘しておりますが、分からず困っております。
やりたいことは、1つのCATPartに複数の形状セットがあり、その形状セット一つ一つをCATPart内にある座標系もしくは平面を使用し、正面視で一枚の図面に落としたいです。
平面と座標系の角度はイコールで、CATPart毎に角度が違ったりしています。
形状セットは基本的に数が決まっています。
形状セットの名前も図面に反映させることができましたら、それも記事にしていただけると嬉しいです。

上記内容を簡単にまとめると『CATPart内にある平面を正面視としたビューをCATDrawingに投影する』というものです。

手動操作では非常にシンプルな「投影」の処理ですが、VABで行うには少し難しい内容を理解する必要があります。ただ、1度内容を理解してしまえばどのような場合でもマクロでの投影が可能になります。

マクロでの投影が可能になると一括でビュー作成が行えるため作業効率は格段にUPされます。
かなり長めの内容となっていますが、実のある内容なのでぜひ最後までお付き合いください。

 

マクロの機能

今回作成したマクロはCATPart内のワイヤー形状をCATDrawingに投影するマクロです。
上画像のようにある程度データ構成に決まりがあるので、サンプルコードをそのまま使用する際は注意が必要です。(もちろんコード内容を少し書き換えれば、様々なデータ構成に対応できます)

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

 icon-wrench マクロの機能まとめ ・CATPart内にある形状セット「SHAPE」内にある形状をCATDrawingに投影する
・投影方向は形状セット「AXIS」内にある平面方向(座標系と平行関係の平面のみ対応)
・「SHAPE」内にセット分けされている形状セット別に投影する
   このとき形状セットの名前は投影する平面の名前が1番初めに含まれている必要がある
 (たとえば平面「A」の方向に投影する場合は「A-1」や「A-A」のように)
 平面の名前が形状セット名の1番初めに含まれていれば投影可能
 
データ構成
 ∟  座標系ノード
 |     ∟  座標系
 ∟  形状セット「AXIS」
 |     ∟  平面
 |     ∟  平面
 ∟  形状セット「SHAPE」
       ∟  形状セット
   |  ∟ 投影する形状(ワイヤー) 
       ∟  形状セット
   |  ∟ 投影する形状(ワイヤー)              

今回の内容はお問い合わせ頂いた内容をもとにテンプレのデータ構成が決まっています。

 

サンプルコード

マクロのコードは下記の通りです。
エラー処理をあまり行っていないため、予めご了承ください。

 

コード解説

テンプレデータ設定

まず、データ構成の名前を定数で指定します。
ここで指定した名前かつツリー第1階層にある形状セットを取得しに行きます。
取得できない場合はエラーが発生するので注意しましょう。
  

各種オブジェクト定義

各種オブジェクトを定義します。
VisPropertySetオブジェクトは形状を投影する際に、形状セットの表示/非表示を切り替えるために定義しておく必要があります。
  

座標系取得

つぎに座標系ノード内にある座標系を取得します。

座標系を取得したら「GetXAxisメソッド」「GetYAxisメソッド」「GetZAxisメソッド」を使い、各方向の成分を取得します。取得した方向成分はかなり細かいものとなっているため「Format関数」を使い、有効数字を小数点以下第3位になるように変換します。

この方向成分は、以降でビューを投影する際の方向として使用します。
 

テンプレデータ構成になっているかを確認 + 形状セットを定義

つぎに、初めに指定した名前の形状セットがあるかを確認します。
2つの形状セット(「AXIS」と「SHAPE」)が見つからなかった場合は、マクロが中断されます。

形状セットが見つかった場合は、それぞれを「hb_axis」「hb_shape」として定義します。
 

形状セット内の平面をすべて取得

「hb_axis」内の平面をすべて取得します。
「Planes」というCollectionを作成し、平面をすべてここに格納しておきます。
 

投影形状の入った形状セットをすべて非表示化

図面に投影する前処理として、「hb_shape」内の形状セットをすべて非表示にします。
以降では、ここで非表示にした形状セットを順に「表示→ビュー更新」といった処理を行います。
 

新規CATDrawingを作成 + シート定義

新規でCATDrawingを作成し、ドキュメントとシートを定義します。
 

ビュー作成 + ワイヤー投影

つぎにループ処理を使ってCATDrawingに形状を投影していきます。
ループ内処理がかなり長いため、コメント文である程度説明をしているので、ここでは簡単に処理内容を解説していきます。

処理内容としては下記の流れになっています。

① 投影方向となる平面の確認/取得
② ①で取得した平面の2成分(平面のH方向とV方向)を取得
③ 投影する形状セットを表示
④ ビュー作成
⑤ 座標系の成分と②で取得した成分より、投影方向を指定
⑥ ビューに形状を投影(⑤の方向)
⑦ ビュープロパティの指定(ビューの位置やスケールの指定)               
⑧ ビューの更新
⑨ 投影した形状セットを非表示

 
ここでは恐らく1番何をやっているかがわからないであろう⑤の処理内容を詳しく解説していきます。

まず大前提として、方向には「成分」というものがあります。
この成分は(X成分,Y成分,Z成分)の3つの成分あり、この3つの成分で1つの方向が表されます。
(※各成分は絶対座標系を基準とする成分です)

X方向を表すのであれば(1,0,0)、
Y方向を表すのであれば(0,1,0)、
Z方向を表すのであれば(0,0,1)と表すことができます。
  

つぎに平面について考えてみます。
平面は「H方向」「V方向」の2つの成分により定義されます。

つまり、H方向が(1,0,0)でV方向が(0,1,0)の場合、これはXY平面を表します。
平面の方向としてはZ方向[成分でいえば(0,0,1)]となります。
 

本コードでは上記で説明した座標系と平面の方向成分を取得しています。
この2つの成分を比較して、投影する方向を分岐させています。
これは単純に平面の成分で形状を投影すると、意図しない向きで投影されてしまうためです。

コード内の「形状投影(座標系の方向別に条件分岐)」のでは投影方向を指定していますが、投影方向を回転させたい場合はここの成分を変更する必要があります。(マイナスを付けたり、成分を変更したりします)
実際に成分内容を変更して、どのように投影方向が決められているのか調べて見ると理解が深まるのでぜひチャレンジしてみて下さい。
  

シートを全表示(リフレーム)

最後にシートを「全表示(リフレーム)」します。

新規作成したCATDrawingはカメラが原点に注視されています。
いちいちカメラをズームアウトするのも面倒なので、実装しているだけの機能であり、必須のものではありません。

 

まとめ

今回はCATPart内のワイヤー形状をCATDrawingに投影するマクロについての内容でした。

コードがかなり長く、また数学の知識(ベクトル関係)も多少必要になるもので、少し難しめの内容でした。ただ、今回の内容のマクロは実用性も高く、作業効率も格段に上げることのできるものなので、時間を割いてでも勉強する価値のあるものです。

今回のサンプルマクロを参考に、自分の好きな方向で形状を投影することのできるマクロが作れたら、図面投影関係のマクロは何でも作れるようになります。ぜひいろいろ試行錯誤して理解を深めていって下さい。

また、今回のコードが理解できて、断面図についても理解してみたい方は下記ページに挑戦してみて下さい。断面図を一括で作成するサンプルマクロです。(今回のマクロよりはるかに難しい内容になっています)

 

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

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

CATIA, CATIAマクロ, VBA

Posted by Lic