CATIAマクロの備忘録|CATIAマクロの作成方法
ここでは「CATIAマクロでこの操作をしたい!」というものを備忘録的なかたちでまとめていきます。
※全ての操作は書ききれないので、個人的によく使うものや興味のあるもののみをまとめています。
このページに書かれているコードはすべて、空のモジュールにコピペするだけで使えるようになっています。そのためコードをあまり理解できていなくても、いくつかの操作を組み合わせるだけで何かしらのマクロを作ることはできます。いろいろ試してみて徐々に使い方を理解していきましょう。
ここに書いているコードは確かにコピペで実行できるものですが、それはある条件がそろっている場合です。各コード内に「事前準備:」と書かれている場合は、そこに書かれているものを作成してからマクロを実行してください。(※作成しないとエラーが発生してマクロが実行できません)
どの状況でもエラーの起きないマクロをコードにすると、条件分岐やオブジェクト定義などの様々なコードが含まれてかなり長いものになってしまいます。そのためここでは必要最低限のものしか書いていないため上記のような状態になっています。予めご了承ください。

CATIAマクロを本気で勉強するなら
CATIA全般
CATIA全般では主に「ドキュメント」「ウィンドウ」「選択」に関する操作がまとめられています。
新規でオブジェクトを作成するというよりかは、現在あるオブジェクトを読み取りそのオブジェクトに対して何らかの操作をするようなものが多いです。
選択しているオブジェクトのタイプを調べる
CATIAマクロを作成していると「これってVBAのオブジェクトでどうやっていうんだろ?」と思うことがよくあります。
オブジェクトのタイプ名は『TypeName関数』を使うことで取得することができます。
以下のコードを実行することで、選択中のオブジェクトのタイプを調べることができます。
たとえば「形状セット」を選択した状態で上記のコードを実行すると、形状セットを表すオブジェクトである「HybridBody」をメッセージボックスで表示させることができます。これはCATPartだけでなくCATDrawing,CATProductなど、どのドキュメントでも使用することができます。
任意のウィンドウをアクティブに
ウィンドウをアクティブするには『Windowオブジェクト』の『Activateメソッド』を使用します。以下のコードを書くことで任意のウィンドウをアクティブにすることができます。
下のコードの場合、CATIA.Windows.Item(1)がアクティブウィンドウとなります。CATIA.Windows.Item(1)とは開いているウィンドウの中の1番目のウィンドウを意味しています。(左の画像でいう「Product1」)
参考:Windowオブジェクト
ウィンドウを上下/左右に並べて表示
ウィンドウを並べて表示するには『Windowsコレクション』の『Arrangeプロパティ』を使用します。
以下のコードを書くことでウィンドウを任意の表示に切り替えることができます。(①~③のどれかを入力)
ドキュメントを保存
ドキュメントを保存するには『Documentオブジェクト』の『Saveメソッド』を使用します。
このメソッドを実行するとメッセージなどの表示なく上書き保存されるため注意して下さい。
(MsgBoxで保存の確認メッセージを出したりするともう少し親切なマクロになります)
同オブジェクトの『SaveAsメソッド』を使うことで、ドキュメントを任意の場所に「名前を付けて保存」をすることも可能です。
オブジェクトの名前を取得
オブジェクトの名前は『AnyObjectオブジェクト』の『Nameプロパティ』を使用します。
このプロパティはどのオブジェクトに対しても使用することができます。
たとえば以下のように書くと「アクティブドキュメントの名前」を取得することができます。
取得した名称は、文字列型の変数(以下でいうObjectName)に代入されます。
任意のオブジェクトをクリックして取得
オブジェクトを上から順に定義せずとも『Selectionオブジェクト』の『SelectElement2メソッド』を使えば、ユーザーが選択したオブジェクトを直接取得することが出来ます。
以下のコードではマクロの実行中にユーザーが選択したオブジェクトを取得することができます。
(ユーザーがオブジェクトを選択するまで、マクロの処理はいったんストップされる)
オブジェクトが選択されるとそのオブジェクトは変数(以下でいうSELObj)に代入されます。
オブジェクトの色を変更
オブジェクトの色を変更するには『VisPropertySetオブジェクト』の『SetRealColorメソッド』を使用します。ワークベンチやドキュメントの決まりはなく、グラフィックプロパティがあるオブジェクトに使用することができます。
以下のコードを実行すると、現在選択しているオブジェクトの色を白に変更することができます。
RGB値を変更することで、任意の色に変更することができます。
参考:Selectionオブジェクト / VisPropertySetオブジェクト
オブジェクトの表示状態を変更
オブジェクトの表示状態を変更するには『VisPropertySetオブジェクト』の『SetShowメソッド』を使用します。(表示状態にしたい場合と、非表示にしたい場合のコードは微妙に違うので注意)
以下のコードを実行すると、現在選択しているオブジェクトの表示状態を切り替えることが出来ます。
参考:Selectionオブジェクト / VisPropertySetオブジェクト
アクティブドキュメントをチェック
各ワークベンチでマクロを使う場合、「PartDocument」「ProductDocument」「DrawaingDocument」といったように各ドキュメントを定義する必要があります。多くの場合は以下のように「CATIA.ActiveDocument」を使って定義します。
上記を実行した場合、アクティブドキュメントがCATPartであれば問題ありません。
しかし、アクティブドキュメントがドラフティング(CATDrawing)やアセンブリー(CATPuroduct)などのCATPartではない場合にはエラーが発生してしまいます。
このようなエラーを出したくない場合は以下のように条件分岐文を追加します。
以下の場合はアクティブドキュメントがCATPartでない場合はマクロを終了します。
参考:TypeName関数
CATIA画面をキャプチャする
CATIAの画面内をキャプチャするには『Viewrオブジェクト』の『CaptureToFileメソッド』を使用します。キャプチャ画像の保存形式と保存場所を指定して以下のように入力します。
以下のコードの場合、アクティブウィンドウ全体(形状領域内)のキャプチャが「Capture1」という名前でデスクトップ上にJPEG形式で作成されます。
上記のCapNameの拡張子と「catCaptureFormatJPEG」の部分を以下のものに変えることで、それぞれの拡張子で保存することができます。※1 グレースケール(白黒)
.cgm → catCaptureFormatCGM
.emf → catCaptureFormatEMF
.tiff → catCaptureFormatTIFF
.tiff → catCaptureFormatTIFFGreyScale ※1
.bmp → catCaptureFormatBMP
GSDワークベンチ
GSDワークベンチはCATPartなので初めに『PartDocument』を定義する必要があります。定義の方法は以下のとおりです。
※以下のコードを書いていないとこの項目の操作はどれも行えないので必ず書いてください。
以下ではDOCは「アクティブなCATPart」
PTはDOCの中の「Part」としてそれぞれ定義しています。
任意の形状セットをアクティブに
任意の形状セットをアクティブ(作業オブジェクトとして設定)にするには、『Partオブジェクト』の『InWorkObjectプロパティ』を使用します。
コードとしては「PT.InWorkObject = ○○」と書きます。
この○○に書かれた変数に入っているオブジェクトがアクティブ状態になります。
以下のコードではPart内のHybridBodies内にある1つ目の形状セット(つまりはツリーの1番上にある形状セット)を「HB」としています。つまり以下のコードを実行することでツリーの1番上にある形状セットをアクティブにすることができます。
形状セットを作成
形状セットの名前は『HybridBodiesコレクション』の『Addメソッド』を使用します。
以下の場合、PTのHybridBodies内(つまりは仕様ツリー第1階層)に形状セットが作られます。
新規で作成された形状セットは変数(以下の場合HB)に代入されます。
アクティブ状態の形状セット内に形状セットを作成したい場合は、1つ上の項目でやった「PT.InWorkObject」を使って以下のように書きます。
形状セットの名前を変更
形状セットの名前を変更するには『AnyObjectオブジェクト』の『Nameプロパティ』を使用します。(AnyObjectを使っているため形状セット以外のオブジェクトもこれと同様に変更することが可能)
コードとしては「○○.Name = “××”」と書きます。
○○には変更したい形状セット(オブジェト)の入った変数を、××には変更したい名前を入力します。
たとえば新規作成した形状セットの名前を変更する場合は以下のように書きます。
以下の場合、形状セットの名前は「NewName」という名前に変更されます。
ドラフティングワークベンチ
ドラフティングワークベンチでできる操作はExcelマクロの内容とかなり似ているため、Excelマクロをさわったことのある方はとっつきやすい内容となっています。
また、似ていることもありExcelと連携させるとかなり便利なマクロを作成することができます。
(たとえば、エクセルで作成した表をそのままドラフティングのテーブルとして作成するというように)
ドラフティングワークベンチはCATDrawingなので初めに『DrawingDocument』を定義する必要があります。定義の方法は以下のとおりです。
※以下のコードを書いていないとこの項目の操作はどれも行えないので必ず書いてください。
以下ではDrwDOCを「アクティブなCATDrawing」として定義しています。
シートの追加
シートの追加は『DrawaingSheetsコレクション』の『Addメソッド』を使用します。
追加するシートの名前を決めて以下のようなコードで書きます。
以下の場合は「NewSheet」という名前のシートが1つ追加されます。
追加されたシートは変数(以下でいうNewDS)に代入されます。
ビューの追加
シートの追加は『DrawaingViewsコレクション』の『Addメソッド』を使用します。
追加するビューの名前を決めて以下のようなコードで書きます。
以下の場合は「NewView」という名前のビューが、アクティブ状態のシートに追加されます。追加されたビューは変数(以下でいうNewVIW)に代入されます。
任意の位置にテーブルを作成
テーブルの作成は『DrawaingTablesコレクション』の『Addメソッド』を使用します。
作成する位置や行列の数、幅や高さなどを指定して以下のように書きます。
以下の場合、X座標,Y座標が100の位置にセルの高さが20,幅が50の2×3のテーブルが作成されます。
作成されたテーブルは変数(以下でいうMyTable)に代入されます。
テーブルの任意の位置(セル)に文字を入力
テーブルの任意のセルに文字を入力するには『DrawaingTableオブジェクト』の『SetCellStringメソッド』を使用します。以下のようにセルの位置と入力する文字列を入力します。
以下の場合セル(1,1)の位置、つまりはテーブルの左上に「Text」という文字が入力されます。
セルの番地は左上を基準に(列番,行番)となっています。(Excelと同じ考え方)
任意の位置にテキストボックスを作成
テキストボックスの作成は『DrawaingTextsコレクション』の『Addメソッド』を使用します。
以下のように入力する文字列と作成する位置を入力します。
以下の場合、X座標,Y座標が50の位置に「Text」と書かれたテキストボックスが作成されます。
作成されたテキストボックスは変数(以下でいうTXT)に代入されます。
CATIA外操作
CATIAマクロではCATIA内以外の操作を行うことも出来ます。
これによりCATIA内データを外部のファイル(Excelやテキスト)に書き出すことが可能となります。
新規フォルダを作成
任意の場所に新規フォルダを作成するには『FileSystemオブジェクト』の『CreateFolderメソッド』を使用します。以下のように保存場所のパスと作成するフォルダ名を入力します。
新規作成されたフォルダは変数(以下でいうCreateFold)に代入されます。
※保存場所に同一のフォルダ名があった場合は上書きされるので注意
新規ファイルを作成
任意の場所に新規ファイルを作成するには『FileSystemオブジェクト』『CreateFile』を使用します。以下のように保存場所のパスと作成するファイル名(+拡張子)を入力します。
また同一名のファイルがあった場合に上書きする[True]か上書きしない[False]かを指定します。
新規作成されたファイルは変数(以下でいうCreateFil)に代入されます。
CATIAマクロでExcelオブジェクトを取得
CATIAに『Excelマクロのライブラリ』を読み込ませます。
① CATIAのVBEのメニューバーから[Tools]>[References…]をクリック
② ウィンドウの中から『Microsoft Excel 16.0 Object Library』にチェックを入れる
(Excelのバージョンによっては16.0ではない場合がある)
読み込みが終わったら、実行するマクロ内に以下のコードを入力することでExcelのオブジェクト(Cells,WorkSheetなど)を使うことができるようになります。
CATIAマクロを本気で勉強するなら