CATIA V5です。
選択したボディのエッジの両端点座標をメッセージボックスで
表示させるサンプルです。
'vba Option Explicit Sub CATMain() '選択 Dim selElm As SelectedElement Set selElm = select_element("select edge", Array("Edge")) '両端点相当の点の取得 '形状セットには点を入れていません Dim endPoints As Variant endPoints = get_end_points(selElm) '座標値を文字列として取得 Dim msg As String msg = "-- 端点の座標値 --" & vbCrLf Dim coords As Variant Dim i As Long For i = 0 To UBound(endPoints) coords = get_coordinates(endPoints(i)) msg = msg & Join(coords, ",") & vbCrLf Next '両端点相当の点を削除する 'これを行わないとCATDUAで削除する事になります 'と思っていたのですが、何か1個残ります・・・ Call remove_elements(selElm, endPoints) MsgBox msg End Sub '両端相当の点の削除 Private Sub remove_elements( _ ByVal selElm As SelectedElement, _ ByVal elements As Variant) Dim pt As Part Set pt = selElm.Document.Part Dim hSFact As HybridShapeFactory Set hSFact = pt.HybridShapeFactory Dim i As Long For i = UBound(elements) To 0 Step -1 hSFact.DeleteObjectForDatum elements(i) Next End Sub '点の座標値取得 Private Function get_coordinates( _ ByVal point As AnyObject) _ As Variant Dim coords(2) As Variant point.GetCoordinates coords get_coordinates = coords End Function '両端相当の点の取得 Private Function get_end_points( _ ByVal selElm As SelectedElement) _ As Variant 'HybridShapeFactory取得 Dim pt As Part Set pt = selElm.Document.Part Dim hSFact As HybridShapeFactory Set hSFact = pt.HybridShapeFactory '曲線上の点の比率 Dim ratios As Variant ratios = Array(0#, 1#) '曲線上の点作成-形状セットには入れない Dim endPoints(1) As Variant Dim i As Long Dim pointOnCurve As HybridShapePointOnCurve For i = 0 To 1 Set pointOnCurve = hSFact.AddNewPointOnCurveFromPercent( _ selElm.Reference, _ ratios(i), _ False _ ) pt.UpdateObject pointOnCurve 'これ重要 Set endPoints(i) = pointOnCurve Next get_end_points = endPoints End Function 'エッジの選択 Private Function select_element( _ ByVal msg As String, _ Optional ByVal filter As Variant = Empty) _ As SelectedElement Set select_element = Nothing If IsEmpty(filter) Then filter = Array("AnyObject") Dim Sel As Variant 'Selection Set Sel = CATIA.ActiveDocument.Selection Sel.Clear Select Case Sel.SelectElement2(filter, msg, False) Case "Cancel", "Undo", "Redo" Exit Function End Select Set select_element = Sel.Item(1) Sel.Clear End Function
点の ”曲線上” を利用し両端点の座標を取得しているのですが、
これ自体はマクロの記録で作れます。
但し、実際に点を作ると "点.1" のような名前になります。
座標値を調べる為だけに一時的な点を作成しているだけなのに
この名前の連番が使われてしまう事を快く思わない方も
いるハズです。
その為、HybridShapeFactoryで点を作成するものの、形状セット
には入れない事で、一時的な点を作成しつつ名前の連番は使われない
と言う方法で座標値を調べています。
但しちょっと不完全です。
こちらで試す限り、円等の閉じたエッジの場合はエラーとなりました。
原因は調べていないです・・・。
今回の様にボディのエッジではなく、GSDの曲線の要素の場合は
幾つか方法がありそうです。
3D曲線の端点座標値を取得 - C#ATIA
正直に申し上げると、よく覚えていないです。