”マクロがPCによって動くものと動かないものがある”と相談を頂きました。
状況が良くわからないので、完全な答えには辿り着けない可能性も有りますが。。。
点を選択後、点の含まれている形状セットの取得部分が問題のようです。
まず、こんなデータを用意しました。
点1は通常の状態で、点2はデータム化されています。
続いてこんなマクロを作りました。
'catvba Sub CATMain() Dim doc As PartDocument Set doc = CATIA.ActiveDocument Dim sel As Variant ' Selection Set sel = doc.Selection '選択 Dim msg As String msg = "点を選択" Dim filter As Variant filter = Array("Point") sel.Clear Select Case sel.SelectElement2(filter, msg, False) Case "Cancel", "Undo", "Redo" Exit Sub End Select '選択要素の取得 Dim point As AnyObject Set point = sel.Item(1).value '結果 Debug.Print "********" Debug.Print "point typename : ", TypeName(point) Debug.Print "point.Parent typename : ", TypeName(point.Parent) Debug.Print "point.Parent.Parent typename : ", TypeName(point.Parent.Parent) Debug.Print "point.Thickness.Parent.Parent typename : ", TypeName(point.Thickness.Parent.Parent) End Sub
点を選択し、Parentのオブジェクトタイプをイミディエイトウィンドウに表示します。
もう答えは書いているのですが・・・。
GSD要素がデータム化されている場合とされていない場合では、画面上や手動操作では
大きな違いを感じませんが、マクロではかなりの違いが有ります。
このマクロで点1を選択した際の結果はこちら
******** point typename : HybridShapePointOnPlane point.Parent typename : HybridShapes point.Parent.Parent typename : HybridBody point.Thickness.Parent.Parent typename : HybridBody
質問者さんのコードでは、"point.Parent.Parent" となっており、HybridBodyが
取得できています。
続いて点2を選択した際の結果はこちら
******** point typename : HybridShapePointExplicit point.Parent typename : Parameters point.Parent.Parent typename : Part point.Thickness.Parent.Parent typename : HybridBody
"point.Parent.Parent" は、HybridBodyではなくPartになります。
そもそも point.Parent が、点1では HybridShapes なのに対し
点2では Parameters になります。
データム化されている・されていないを判断し処理を分けるのも
良いかもしれませんが、共通のプロパティ Thickness を利用すると
処理を分ける必要も無さそうです。
Dim HybrBody As HybridBody Set HybrBody = point.Thickness.Parent.Parent
Thicknessプロパティ は HybridShapeオブジェクトで実装されています。
以前から思うのですが、何故GSD要素に "厚み" が必要なのかな?
(ライセンス無いのでわからないのですが ボリューム?)