内容的にはショボイのですが、実績が少ないのでInternalNameの
テストを行いました。
まずはこんな感じのデータを作りました。
点を5個作成しただけです。
続いてこんなコードを作成し実行します。
'vba Sub InternalName_Test() Dim Doc As PartDocument Set Doc = CATIA.ActiveDocument Dim Pt As Part Set Pt = Doc.Part Dim HB As HybridBody Set HB = Pt.HybridBodies.Item(1) Dim Itm As AnyObject Dim ModE As ModelElement Debug.Print "*** DisplayName : InternalName ***" For Each Itm In HB.HybridShapes Set ModE = Itm.GetItem("ModelElement") Debug.Print ModE.DisplayName + " : " + ModE.InternalName Next End Sub
形状セット内の要素のDisplayNameとInternalNameを表示させるだけです。
結果はこちら
*** DisplayName : InternalName *** 点.1 : GSMPoint.1 点.2 : GSMPoint.2 点.3 : GSMPoint.3 点.4 : GSMPoint.4 点.5 : GSMPoint.5
続いて、点.3を削除し再度マクロを実行します。
結果はこちら
*** DisplayName : InternalName *** 点.1 : GSMPoint.1 点.2 : GSMPoint.2 点.4 : GSMPoint.4 点.5 : GSMPoint.5
まぁこうなる事を期待してやりました。
このPartファイルをいったん保存し、ついでにCATIAも落とし
再度このファイルを開き、マクロを実行します。
*** DisplayName : InternalName *** 点.1 : GSMPoint.1 点.2 : GSMPoint.2 点.4 : GSMPoint.4 点.5 : GSMPoint.5
InternalNameが変更されていない事が確認できます。
さらにCATDUAを実行し、再度マクロを実行します。
(エラーは検知されませんでしたが)
*** DisplayName : InternalName *** 点.1 : GSMPoint.1 点.2 : GSMPoint.2 点.4 : GSMPoint.4 点.5 : GSMPoint.5
やっぱり変わりません。 InternalNameはオブジェクトの
インスタンスが作成(今回なら点が作成)された時点で割り当てられ
その後変更もされないようなので、同じファイル内であれば
同一オブジェクトだと判断しても良いようです。
続いてInternalNameからオブジェクトを取得したくなります。
・・・と言うより取得できないと、魅力半減です。
先程のPartファイルを利用し、こんなコードを作り実行しました。
'vba Sub InternalName_Test2() Dim Doc As PartDocument Set Doc = CATIA.ActiveDocument Dim Pt As Part Set Pt = Doc.Part Dim InterName As String InterName = "GSMPoint.1" 'InternalName 'InterName = "点.1" 'DisplayName Dim Oj As AnyObject Set Oj = Pt.FindObjectByName(InterName) Dim Sel As Selection Set Sel = Doc.Selection Sel.Clear Sel.Add Oj Sel.VisProperties.SetShow catVisPropertyNoShowAttr '非表示 Sel.Clear End Sub
結果はこちら
非表示になりました。PartのFindObjectByName関数でオブジェクトを
取得できます。
これDisplayNameでも取得できるので、"点.2" の名前を
"GSMPoint.1" に変更し再度実行しました。
結果はこちら
さらに意地悪く、リオーダーし"点.1" と "GSMPoint.1" を入れ替え
実行してみました。
う~ん。 FindObjectByName関数は InternalName と DisplayName
のどちらを優先しているのかはわかりませんが、Treeの上のほうの
オブジェクトを優先しているようです。 確かGetItem関数もそんな感じ
だったような記憶です。