Part内のボディーをIGES出力するマクロ|CATIAマクロの作成方法

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

パーツボディー内でボディーや形状セットを分割し部品を組み上げています。
そこで、以下のようなことができないか考えています。

・1つのボディーだけを表示させ、IGESファイルで保存する

※IGES(拡張子.igs):様々なCADソフトで利用可能な中間ファイル

基本的にはProduct内のCATPartをIGESファイルで出力するマクロと同じ考えです。
CATPart内出力では表示状態の形状をIGES出力することができるので、表示/非表示を切り替えて行くことで全てのボディーを1つずつ出力することが可能になります。

 

マクロの機能

今回作成したマクロはPart内のボディーを1つずつIGESファイルとして出力するマクロです。
画像には形状セットもありますが、本マクロはボディーのIGES出力のため完全に無視しています。

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

 icon-wrench マクロの機能まとめ ・アクティブドキュメント(CATPart)内のボディーをIGESファイルとして出力
・ファイル名は「Body-X.igs」 (※「X」は連番)
・ボディー内が空の場合も空のIGESファイルが出力される
・マクロ実行後にデスクトップに新規作成される「IGES書き出し 日時」フォルダに出力
・出力後はフォルダを開く
 
※注意点
・「IGES書き出し 日時」と同名のフォルダがデスクトップにある場合はマクロ中断
 (日時には現在の「年/月/日/時/分/秒」が入力されるため、同名フォルダは存在しないはず )

IGESファイルはもともと米国規格だったため、バージョンによっては日本語名をつけることができない場合があります。そのためサンプルコードでは「Body-X.igs」という名称をつけていますが、特に深い意味はないので任意で書き換えてください。

 

サンプルコード

マクロのコードは以下のとおりです。
マクロ実行後にCATPart内の全てのボディーをIGESファイルとして出力します。
実行後にマクロの操作をキャンセルしたい場合は[Esc]キーを押下してください。

※コピペで実行可能ですが、保存場所のパスだけは自身の環境に合わせて書き直す必要あり

 

 

コード解説

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

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

条件分岐の先、つまりはアクティブドキュメントがCATPartの場合は変数「doc」にアクティブドキュメントを代入します。

アクティブドキュメント(CATPart)が定義できたら、あわせてPartオブジェクトを定義します。
 

Selection/VisPropertySet定義

次にSelectionオブジェクトVisPropertySetオブジェクトを定義します。
この2つのオブジェクトを使ってPart内のボディーの表示状態を切り替えることが可能になります。
 

書き出し用フォルダ作成

IGESファイルを出力するためのフォルダを作成します。

まずは保存場所のパスを取得します。
上記のコードでは保存場所を「SavePath = “C:\Users\ユーザー名\Desktop”」
つまりはデスクトップとしています。
※再三の注意となりますがここのパスはご自身のPCのパスに書き換えて下さい。
 多くの場合、「ユーザー名」の部分を自分のものにすれば問題ないと思います。

次に、作成するフォルダの名称を指定します。
上記コードでは「IGES書き出し 日時」というフォルダ名で作成しています。
(日時には現状の日時の年から秒までを取得し、その数字の羅列を入力しています。
たとえば2020年1月2日3時4分56秒の場合、「20200102030456」と入力されます。)

このようにフォルダ名を時間によって変更させることで
デスクトップ上に同じフォルダが存在しないようにしています

ただ必ずしも存在しないとは言えないので
万が一同じフォルダが存在した場合にはマクロを終了するようにしています。
フォルダの存在を確認するには「FileSystemオブジェクト」の「FolderExistsメソッド」を使います。

最後に、これまでに決めた「保存場所」と「フォルダ名」を組み合わせてフォルダを新規作成します。
フォルダの作成は「FileSystemオブジェクト」の「CreateFolderメソッド」を使って行います。
 

IGES出力

今回のマクロのメインの部分の処理「IGES出力」をしていきます。

処理内容としては以下の内容を全てのボディーに対して繰り返しているだけです。

① ツリー第1階層にある全てのボディーと形状セットを非表示    
② ボディーを1つだけ表示
③ IGES出力

 
任意のドキュメントを別ファイルとして書き出すには

Documentオブジェクト」の「ExportDataメソッド」を使います。

 icon-code ExportDataメソッド  

Documentオブジェクト.ExportData パス,拡張子

この構文によりDocumentオブジェクトを指定した拡張子で書き出すことができます。
パスには出力先のパス(ファイル名も含む)を入力、
拡張子には出力するファイルの拡張子を入力します。

コードのはじめにある「CATIA.RefreshDisplay=False」は画面の更新を無効にする処理です。これを行うことで多少ではありますが処理速度が速くなります。最後に「CATIA.RefreshDisplay=True」で元の状態に戻しています。
 

出力フォルダを表示

最後にデスクトップに作成したフォルダを「Shell関数」を使って開きます。
Shell関数についてはExcelマクロでもよく使われ、多くの解説ページがあるためここでは割愛します。

 

まとめ

今回はCATPart内のボディーをIGESファイルとして出力するマクロについての内容でした。

このマクロの重要な部分は「ExportDataメソッド」による別ファイル出力と、表示状態を切り替えるためのSelectionオブジェクトVisPropertySetオブジェクトの2つのオブジェクトです。

これらを使うことでIGES以外のファイル出力も可能になるはずなのでいろいろ試してみてください。
 

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

 

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

CATIA, CATIAマクロ, VBA

Posted by Lic