選択したサーフェスに面直なパイプ形状を一括作成するマクロ|CATIAマクロの作成方法

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

ワークベンチ: part design

マクロ案: 
任意の曲面に面直の複数の円柱(パイプ)形状を作るのはマクロで可能でしょうか。
<作りたいもののイメージは丸穴のスピーカーメッシュ>
自分の場合は曲面上の点を使って面直の直線作成
そのあとはスイープサーフェス(Φ3mm)作りました。
作業がパワーコピーでかなり楽になりましたが500個ぐらいの円柱形状の作成はちょっとしんどかった。

今回のマクロは「マクロといったらこれ」というような形状の一括作成マクロです。
コードとしてはあまり複雑ではありませんが、使い方によっては劇的に効率がUPできるので、ぜひ本ページを参考に自身の環境でも使えるようなマクロを自作してみて下さい。

 

マクロの機能

今回作成したのは選択したサーフェスに面直なパイプ形状を一括作成するマクロです。
具体的な機能は以下のとおりです。

  マクロの機能まとめ ・選択したサーフェスに面直なパイプ形状を一括作成する
・パイプは選択した形状セット内にある点を中心として作成される
・形状はツリー第1階層に新規作成される形状セットにまとめて作成される
・処理の流れは下記の通り
 ① サーフェス選択
 ② 点のまとまった形状セット選択
   ③ 直線作成(②の点を通り、①のサーフェスに面直な直線)
 ④ スイープ作成(③を中心とするΦ3のパイプ)  
スイープの直径や長さはコード上で指定しているので、任意で書き換えて下さい。

 

VBAコード

コード全体は下記の通りです。
マクロ実行後「①サーフェス選択→②点のまとまった形状セット選択」の順に選択してください。

 

コード解説

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

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

アクティブドキュメントが定義できたら、以降で使うためのオブジェクトをまとめて定義しておきます。ここでは下記の用途で各オブジェクトを定義しています。

Partオブジェクト            :ツリー第1階層指定用/hsf定義用
HybridShapeFactoryyオブジェクト:スイープ/直線作成用
Selectionオブジェクト                   ユーザー選択でのオブジェクト取得用

 
曲面(サーフェス)をユーザー選択で取得

次にスイープを作成する際に必要になる曲面(サーフェス)を取得します。
ここではSelectionオブジェクトSelectElement2メソッドを使って曲面を取得します。

SelectElement2のフィルターとして「HybridShape」を指定していますが、これにはサーフェスだけでなく点や曲線も含まれてしまうため、しっかりとしたフィルターにはなっていないので注意してください。(※サーフェス以外が選択されると以降でエラーが発生します)

 
形状セットをユーザー選択で取得

次にスイープの軸線を作成する際に必要になる点を取得します。
今回は一括で複数のパイプを作成するため、インプットとして点は複数個が想定されます。

そこでここでは点の入った形状セットをSelectionオブジェクトSelectElement2メソッドを使って取得します。

 
スイープサーフェス出力用形状セット

つぎに新規形状セットをツリー第1階層に作成します。
これから作成する直線とスイープ形状はこの形状セット内に格納していきます。
ここではこの形状セットの名称を「パイプ」に変更しています。

 
形状セット内の点をすべてコレクションに格納

次に先に取得していた形状セット内にある点をすべて取得します。
これにはSelectionオブジェクトのSearchメソッドを使って、psというコレクションに格納していきます。詳しくは選択しているオブジェクトを一時保管する方法を参照下さい。

これによりpsコレクション内ループを行えば、全ての点に対して処理を行うことが可能になります。(これは今回でいうところの直線/スイープの作成処理です)

  
パイプ形状作成

最後にこれまでに取得したオブジェクトを使いスイープを作成していきます。

形状作成の大きな流れは下記の通りです。

① 材料となる形状のオブジェクトをReferenceに変更する
② HybridShapeFactoryオブジェクトのメソッドと①のReferenceを使って形状作成 
③ 作成した形状を形状セットに追加(Append)する

 
これらをpsコレクション内ループですべての点に対して処理していきます。

今回の場合、点はループ毎に変化していきますが、曲面は常に同じものを使用します。
そのため上記コードでは予めpsコレクション内ループの外で曲面のReferenceを作っています。
(Referenceの作成はPartオブジェクトのCreateReferenceFromObjectメソッドを使います)

あとは直線を作成、その直線を使ってスイープの作成と行うだけです。
サーフェスに直交な直線の作成は「AddNewLineNormalメソッド」を使います。

  icon-code 直線作成  

Dim l As HybridShapeLineNormal
Set l = hsf.AddNewLineNormal(ref_surf, ref_p, 5#, -5#, False)

引数は順に直交とするサーフェス」「基準点」「始点」「終点」「向きです。
上記コードの場合はref_pを通りref_surfに直交な、始点5mm、終点-5mmの直線が作成されます。(最後のFalseTrueにすると直線の方向が逆転して作成されます)

中心線と半径から作成されるスイープは「AddNewLineNormalメソッド」を使います。

  icon-code スイープ作成  

Dim sweep As HybridShapeSweepCircle
Set sweep = hsf.AddNewSweepCircle(ref_l)
With sweep
 .Mode = 6
 .SetRadius 1, 1.5
 .SetbackValue = 0.02
End With

引数は中心線だけです。
半径は作成後にプロパティより変更させていきます。
「sweep.Mode=6」は中心線と半径から作成するスイープを表していて
「sweep.SetRadius=1, 1.5」は半径を指定しています。(今回はΦ3なのでR1.5で指定しています)
「sweep.SetbackValue=0.02」はセットバックの値を表しています。(ここではデフォルトの2%)

サンプルコードには他のプロパティも書いてありますが、最低限上記3つさえ書いておけば問題ないので任意で追加してください。

 

まとめ

今回は選択したサーフェスに面直なパイプ形状を一括作成するマクロについての内容でした。

基本的には形状作成マクロなので「HybridShapeFactory」の使い方さえ理解しておけば、他の形状の一括作成などもできるようになります。

VBAでの形状作成の基本の流れは下記の通りなのでこれだけは押さえておきましょう。

① 材料となる形状のオブジェクトをReferenceに変更する
② HybridShapeFactoryオブジェクトのメソッドと①のReferenceを使って形状作成 
③ 作成した形状を形状セットに追加(Append)する

 

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

 

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

CATIA, CATIAマクロ, VBA

Posted by Lic