VBAでオブジェクトを取得1|CATIAマクロの作成方法

マクロの中には新規でオブジェクトを作成する以外にも、既存のオブジェクトに対して何らかの操作をするものがあります。(むしろそっちの場合の方が多いかもしれません)
このとき、その既存のオブジェクトをVBAのコードで表す必要があります。

既存のオブジェクトをコードで表すには、仕様ツリーと『Infrastructure Automation Objects』に表記されているオブジェクトツリーの構成の関係を理解する必要があります
少し複雑で難しい内容ですが、CATIAでマクロを作成する上で非常に重要なポイントなのでしっかりと押さえておきましょう。

今回学べる内容は以下のとおりです。

 VBAでオブジェクトを取得する方法

※『Infrastructure Automation Objects』が何を意味しているのか分からない人は、まずオブジェクトとコレクション/プロパティとメソッドとは 』を先に読むことをオススメします。

 

既存のオブジェクトを取得する

ここでは以下の画像のような場合の「形状セット.1」を取得する(VBAコードで表す)方法を見ていきます。

 

オブジェクトの親を調べる

まずはじめに、『Infrastructure Automation Objects』の中からコードで表したいオブジェクトを探し出します。

今回、コードで表したいオブジェクトは「形状セット」なので上記のツリー構成の中から「HybridBody」を探します。

 icon-edit HybridBodyとは 
形状セットはVBAでは『HybridBody』と表されます。
またHybridBodyにはHybridBodiesコレクションが用意されています。
非常によく使うので両方とも覚えておきましょう。
 
その他のオブジェクトは基本的に英語なのでなんとなく理解できると思います。
ちなみに形状セットは英語では『Geometrical Set』といいます。

 
形状セットの場合、使用するドキュメントは パーツドキュメントだけなのでツリー上の「PartDocument」をクリックし、「Part Document Automation Objects」ページに移動すると「HybridBody」というものを見つけることができます

オブジェクトをみつけたら、その親を順々に確認していきます。
「HybridBody」の場合は以下のような親を持っているということがわかります。

  [Application]
icon-chevron-down  [Documents]
icon-chevron-down  [Document]([PartDocument])
icon-chevron-down  [Part]
icon-chevron-down  [HybridBodies]
  [HybridBody]

 

親を上から順に定義

既存のオブジェクトをコードで表すにはこれらの親をすべて上から順に定義していく必要があります

イメージとしては住所のようなものです。
あなたが郵便屋さんだとして、住所がいきなり町名から始まっていたら、どこにのことをいっているのかわかりません。しかし県、市、区、町のように形式に沿って上から順に書かれていればどこのことをいっているのか理解することができると思います。

VBAもこれと同じでオブジェクトを上から順に定義していかないとマクロがうまく読み取ってくれなくなるため、しっかりと順を追って定義してあげる必要があります。

 
Applicationオブジェクト

オブジェクトの中での1番の親である[Application]は「CATIA」と決まっているのでこのオブジェクトに関しては定義する必要はありません
Applicationオブジェクトのプロパティ、メソッドは使用する時にApplicationとは書かずにCATIAと書くので注意しておきましょう。

×   Application.ActiveDocument 
○  CATIA.ActiveDocument    

 

Documentsコレクション

次に「Documentsコレクション」を定義していきます。
DocumentsコレクションはDocumentオブジェクトをまとめたものを表します。
今回の場合「Part1」と「Part2」の2つのドキュメントが開いているため、複数のドキュメントを取り扱うことのできる「Documentsコレクション」の定義が必要になります。

まずはDocumentsコレクションを入れるための変数を宣言します。

 icon-code Documentsコレクションを宣言

Dim DOCs As Documents

宣言ができたら、このDOCsがどこにあるものなのかを定義していきます。
DocumentsはApplicationの直属の子であるため、Applicationの「Documensプロパティ」を使って以下のように書きます。

 icon-code Documentsコレクションを定義

Set DOCs = CATIA.Documents

これでDocumentsコレクションの定義は完了です。
 

Documentオブジェクト

次に「Documentオブジェクト」を定義していきます。
先ほどと同じようにDocumentを入れるための変数を宣言します。
データ型は パーツドキュメントを表す「PartDocument」を入力します。

 icon-code Documentオブジェクトを宣言

Dim DOC As PartDocument

次にこのDOCとはどのドキュメントを表しているのかを定義する必要があります。
この定義には先ほどつくったDocumentsコレクションを使って定義していきます。

どのコレクションにも「Itemメソッド」が用意されいるため、これを使って以下のように書きます。

 icon-code Documentオブジェクトを定義

Set DOC = DOCs.Item(1)
Set DOC = DOCs.Item(“Part1.CATPart”) ‘こちらの書き方でも可

 icon-edit Itemメソッドとは 

Itemメソッドは以下のように書くことで、コレクションの中から任意のオブジェクトを取り出すことができます。

コレクション名.Item(インデックス)
コレクション名.Item(“オブジェクト名”)

コレクションの中のオブジェクトにはそれぞれインデックス(番号)が自動で割り振られ、このインデックスを指定することで任意のオブジェクトを表すことができます。
 Documentsコレクションの場合は開いたドキュメント順に1,2,3…と割り振られていきます。
 
現在開いているドキュメントは「Part1」と「Part2」の2つです。
そのため先に開いた「Part1」はDOCs.Item(1)、次に開いた「Part2」はDOCs.Item(2)と表すことができます。

これでDocumentオブジェクトの定義は完了です。
 

Partオブジェクト

次に「Partオブジェクト」を定義していきます。
これまでと同じようにPartを入れるための変数を宣言します。

 icon-code Partオブジェクトを宣言

Dim PT As Part

次にこれまでと同じようにPTがどこにあるものなのかを定義します。
先ほど作ったDOC(PartDocumentオブジェクト)の「Partプロパティ」を使い、以下のように書きます。

 icon-code Partオブジェクトを宣言

Set PT = DOC.Part

これでPartオブジェクトの定義は完了です。

 

「文字ばっかで何してるのか感覚がつかめない」
という人もいると思うのでここで一息つきましょう

 
これまでに取得したオブジェクトを画像として見ると以下のようなイメージとなっています。

親から子になるにつれて徐々に「形状セット.1」に近づいていっていることがわかります。
あとは「HybridBodies」と「HybridBody」つまりは形状セットに関するオブジェクトを定義すれば、「形状セット.1」を取得することができます。

 

こうして画像で見るとこれまでに
何をやってきたのか何となく理解できますね

 

 

 
HybridBodiesコレクション

次に「HybridBodiesコレクション」を定義していきます。
これまでと同じようにHybridBodiesを入れるための変数を宣言します。

 icon-code HybridBodiesコレクションを宣言

Dim HBs As HybridBodies

次に「Documentsコレクション」と同じ要領でHybridBodiesを定義していきます。
PT(Partオブジェクト)の「HybridBodiesプロパティ」を使い以下のように書きます。

 icon-code HybridBodiesコレクションを定義

Set HBs = PT.HybridBodies

これでHybridBodiesコレクションの定義は完了です。

 
HybridBodyオブジェクト

最後に「HybridBodyオブジェクト」を定義していきます。
これまでと同じようにHybridBodyを入れるための変数を宣言します。

 icon-code HybridBodyオブジェクトを宣言

Dim HB As HybridBody

次に「Documentオブジェクト」を定義した時と同じようにHBs(HybridBodiesコレクション)の「Itemメソッド」を使ってHybridBodyを定義します。

icon-code HybridBodyオブジェクトを定義

Set HB =HBs.Item(1)
Set HBHBs.Item(”形状セット.1”)  ‘こちらの書き方でも可

これでHybridBodyオブジェクトの定義は完了、つまりは「形状セット.1」の取得は完了です。
取得した「形状セット.1」は変数HBに入っているため、現在VBA上で「形状セット.1」に対して何かしらの操作を行いたい場合は変数HBを使います。
 

これまでのコードをまとめると以下のようになります。

 

メッセージボックスで確認

最後にしっかりオブジェクトを取得できたかをメッセージボックスを使って確認してみます。
最後の行に以下のコードを記入して実行してみて下さい。

icon-code 確認用コード

MsgBox HB.Name

これで「形状セット.1」とメッセージボックスが表示されれば、しっかりオブジェクトの取得できています。
また、HBの部分をDOCPTに変更すると「Part1.CATPart」「Part」と表示されることからDOCPTも取得できていることがわかります。

このようにメッセージボックスを使うことでオブジェクトを取得できているかを簡単に確認することができます。
(実際はVBE上でDebugを使っての確認の方法が一般的ですが)

 

まとめ

今回の内容をまとめると以下のとおりです。


 オブジェクトの取得は親から順にしていく

コレクションが出てきたらItemメソッドを使う

メッセージボックスで取得ができているかのの確認ができる

はじめのうちは理解するのに少し時間がかかるかもしれませんが、だんだんと理解することができるようになっていきます。
今のうちは「このオブジェクトを取得するぞ」と何か目標を決め、試行錯誤しながらいろいろ書いてみるのがいいと思います。

次回はPT以下のオブジェクトの取得方法をより深掘りしてみていきます。
たとえば「形状セットの中にある形状セットをどのように取得するのか」や「サーフェスや点のような形状はどのように取得するのか」を解説していきます。

目次へ戻る
 

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

 

2022年7月28日CATIA, CATIAマクロ

Posted by Lic