読者です 読者をやめる 読者になる 読者になる

C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

VBAでマクロを作成する際の我流な手順2

こちらの続きです。
VBAでマクロを作成する際の我流な手順1 - C#ATIA

マメな性格な方であれば、一つ一つHelpを見て理解して頂くと
良いのですが、当方めんどくさがりな性格なので次の手段に移ります。

Dim ~ は変数の宣言なのでとりあえず無視し、それ以外の部分を
最後の方からコメント化し、再度マクロを実行し再現されるか?
を確認してみます。(CATIA側はUndoした方がわかりやすいかもです)

'vba
...

'part1.UpdateObject hybridBody1
...

これで再実行したところ、コメント化前と変わらず形状セットが作成されました。
つまりこの行は、形状セットの作成には直接関係無い事がわかります。

さらに続けてみます。

'vba
...
Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim hybridBody1 As HybridBody
'Set hybridBody1 = hybridBodies1.Add()
...

これで再実行すると形状セットが作成されませんでした。つまり
この行こそが、形状セット作成の為のコードだろうと予想できます。
又、この代入されている変数の型(HybridBody)が、形状セット
ではないか?と感じることも出来ます。

ここでHybridBodyをHelpで見てみます。
f:id:kandennti:20150624151105p:plain
細かな事は無視しておきます。
「Property Index」(プロパティ)と「Method Index」(メソッド)が存在
している事がわかります。個人的にはプロパティで提供されているものは
非常にありがたいです。

さらに "hybridBodies1.Add()" を代入している事から、
「HybridBodies」の「Add」メソッドが何をしているのかを
知りたいところです。そこで「HybridBodies」をHelpで
見てみます。
f:id:kandennti:20150624151114p:plain
「Add」メソッドありました。英訳すればわかるのでしょうが、要は
"新しい形状セットを作成する為のメソッド" だと書かれています。(多分)
また「HybridBodies」はコレクションです。しかもHybridBody(形状セット)専用の
コレクションとなっています。(型名が複数形になっているので察しは付きますね)

ここで、先程コメント化した行を元に戻し、ブレークポイントにします。
f:id:kandennti:20150624151138p:plain
さらにローカルウィンドウを表示させた状態にします。
f:id:kandennti:20150624151150p:plain
この状態で再度マクロを実行すると、このような感じになります。
f:id:kandennti:20150624151157p:plain
(Text3Dとかモジュール6とかは、今やりかかっているものなので無視して下さい)
"hybridBodies1"は代入される直前で止められている為、"Nothing"
の状態です。

さらにF8キーを押し、1行だけ実行を進めます。
f:id:kandennti:20150624151233p:plain
"hybridBodies1"は代入され左側の "+" をクリックすると色々なものが
展開され、こんな感じになります。
これが "hybridBodies1" で利用できるプロパティとなります。
(プロパティはローカルウィンドウで確認できる為、非常にありがたいわけです)

よく見ると "Name" プロパティのValueにCATIAのTree上で表示されている
名前と同じものが存在しています。 このプロパティを変更すれば
形状セット名のリネームが出来そうな感じがします。
こんな感じにしました。

'vba
Sub CATMain()

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.Add()
hybridBody1.Name = "hoge" '文字の代入なのでSet無し

'part1.UpdateObject hybridBody1

End Sub

実行してみると、先程は "形状セット.2" と言う名前で作成されましたが、
リネームされた形状セットが作成された事が確認できます。
f:id:kandennti:20150624151302p:plain

無事リネーム出来たのですが、ここで疑問に思う事が無いでしょうか?
最初にHybridBodyをHelpで見た際、"Name" プロパティは存在して
いませんでした。
VBAには、クラスの継承と言う観念が無い為わかりにくいのですが、
Helpのオブジェクト(コレクション)名の下にインデントされて表示されている部分が、
クラスやインターフェースの継承を表しており、これらで定義されている
プロパティやメソッドが利用可能となっています。
(NameプロパティはAnyObjectで実装されています)
f:id:kandennti:20150624151347p:plain