オブジェクトレゾリューションでオブジェクトのVBAコードを調べる|CATIAマクロの作成方法
CATIAでマクロを作成していると
「このオブジェクトのタイプって何だっけ?」
「このオブジェクトを定義するには、どのオブジェクトから順に定義していけばいいんだっけ?」
といった、ちょっとした疑問によくぶつかります。
これらはもちろんVBAのヘルプ『CAA V5 Visual Basic Help』や『マクロの記録』で調べることもできますが、どちらにしても少しの“手間“がかかります。
そんなCATIAマクロですが、もっと簡単にこれらを調べることのできる
『オブジェクトレゾリューション』という機能が用意されています。
今回はそんな「オブジェクトレゾリューション」について解説していきます。
オブジェクトレゾリューションとは
CATIA VBAには『オブジェクトレゾリューション』という機能が搭載されています。
『オブジェクトレゾリューション』を使うことで、
CATIA上で選択したオブジェクトをVBAコードとして取得することが出来ます。
文字だけではわかりづらいので実際に、オブジェクトのコードを取得してみましょう。
VBEの[Insert]タブ>[オブジェクトレゾリューション…]を選択します。
選択後するとCATIAウィンドウが最前面にくるので何かしらのオブジェクトをクリックします。
(※選択するオブジェクトのタイプによってはVBAコードを取得できないものもあります)
ここでは、「XY平面」を選択してみましょう。
XY平面をクリックするとVBEのモジュール内に下記のようなコードが挿入されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
'---- オブジェクトのレゾリューション スクリプトの開始: XY平面 Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim originElements1 As OriginElements Set originElements1 = part1.OriginElements Dim hybridShapePlaneExplicit1 As HybridShapePlaneExplicit Set hybridShapePlaneExplicit1 = originElements1.PlaneXY '---- レゾリューション スクリプトの終了 |
これはXY平面をVBAで書いた場合のスクリプトです。
上記のコードをみるとXY平面は「OriginalElementsオブジェクト」の「PlaneXYプロパティ(もしくはメソッド)」で取得でいることがわかります。また、同様に「OriginalElementsオブジェクト」は「Partオブジェクト」から定義することができるということもわかります。
このように『オブジェクトレゾリューション』を使うことで選択したオブジェクトのタイプや定義方法、親オブジェクト/子オブジェクトの関係などが一気に読み取ることができます。
ただ注意しないといけない点もあります。
『オブジェクトレゾリューション』で出力されるコードはほとんどの場合、下記コードのように「Itemメソッド」と「名称」によってオブジェクトが取得されます。つまり、オブジェクトの名称が変わったり、ツリー構成が少し変わるだけで取得することのできなくなる融通が利かないコードであるともいえます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
'---- オブジェクトのレゾリューション スクリプトの開始: 点.1 Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim hybridBodies1 As HybridBodies Set hybridBodies1 = part1.HybridBodies Dim hybridBody1 As HybridBody Set hybridBody1 = hybridBodies1.Item("形状セット.1") Dim hybridShapes1 As HybridShapes Set hybridShapes1 = hybridBody1.HybridShapes Dim hybridShapePointOnPlane1 As HybridShapePointOnPlane Set hybridShapePointOnPlane1 = hybridShapes1.Item("点.1") '---- レゾリューション スクリプトの終了 |
このように『オブジェクトレゾリューション』では簡単にオブジェクトをVBAコードとして取得することができまが、使い勝手としてはかなり悪いコードなのでいろいろと書き直す必要があるということは頭に入れておきましょう。
オブジェクトレゾリューションとマクロの記録の違い
CATIA VBAにはコードを調べる方法として『マクロの記録』という機能も用意されています。
(これはExcel VBAにもある機能なので存在を知っている人は多いと思います)
たとえば「形状セット.1」内に座標をX=10,Y=20,Z=30と指定して点を作成した場合、マクロの記録により出力されるコードは下記のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Sub CATMain() Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim hybridShapeFactory1 As HybridShapeFactory Set hybridShapeFactory1 = part1.HybridShapeFactory Dim hybridShapePointCoord1 As HybridShapePointCoord Set hybridShapePointCoord1 = hybridShapeFactory1.AddNewPointCoord(10#, 20#, 30#) Dim hybridBodies1 As HybridBodies Set hybridBodies1 = part1.HybridBodies Dim hybridBody1 As HybridBody Set hybridBody1 = hybridBodies1.Item("形状セット.1") hybridBody1.AppendHybridShape hybridShapePointCoord1 part1.InWorkObject = hybridShapePointCoord1 part1.Update End Sub |
座標をX=10,Y=20,Z=30としていることから、上記コードの
「hybridShapeFactory1.AddNewPointCoord(10#, 20#, 30#)」
の部分で座標を指定していることがわかります。
このことから『マクロの記録』はオブジェクト作成、オブジェクト選択などの「開発者(あなた)の操作」をコード化し取得していることがわかります。
対して『オブジェクトレゾリューション』は現在すでに存在しているオブジェクトを単純に定義した場合のコードを取得しています。そのため選択したオブジェクトが「どのように作られたものか」や「オブジェクトの選択やウィンドウの操作方法」などはオブジェクトレゾリューションでは取得することが出来ません。
どちらも一長一短なのでマクロ開発時にはうまいこと使い分けましょう。
[マクロの記録]
→ オブジェクトの作成履歴を調べる場合
→ オブジェクトのプロパティやメソッドを調べる場合
[オブジェクトレゾリューション]
→ オブジェクトのタイプを調べる場合
→ VBAオブジェクトの親子関係を調べる場合
まとめ
今回は『オブジェクトレゾリューション』について解説してきました。
オブジェクトレゾリューションはあまり知られていない機能ですが、使いようによっては『マクロの記録』より優秀にもなります。機会があれば、ぜひ今後のマクロ開発に取り入れてみて下さい。
今回の内容をまとめると下記の通りです。
・CATIA VBAには『オブジェクトレゾリューション』という機能がある
・VBEの[Insert]タブ>[オブジェクトレゾリューション…]より実行可能
・オブジェクトのタイプや親子関係を調べたい場合に非常に有効
・『マクロの記録』と組み合わせることで
CATIAマクロを本気で勉強するなら