C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

断面図から断面を切った位置の座標値を取得

こちらでコメント頂いた
「断面図から断面を切った位置の座標値を取得」
についてです。
図面の断面のネーミング - C#ATIA


結論から書くと、取得出来そうに有りませんでした。
念のためこんな感じのコードは作りました。

'vba using-'KCL0.0.12'  by Kantoku
'断面図から断面元のビューと断面数の取得

Sub CATMain()
    'ドキュメントのチェック
    If Not CanExecute("DrawingDocument") Then Exit Sub
    
    '断面図選択
    Dim msg As String
    msg = "DrawViewを選択して下さい : ESCキー 終了"
    
    Dim secvi As DrawingView
    Set secvi = SelViewSection(msg)
    If secvi Is Nothing Then Exit Sub
    
    '断面元取得
    Dim refvi As DrawingView
    Set refvi = secvi.ReferenceView
    If refvi Is Nothing Then
        MsgBox "断面図の元のビューが取得出来ませんでした"
        Exit Sub
    End If
    
    '断面数取得
    Dim seccnt As Long
    seccnt = GetSectCount(refvi)
    
    msg = "選択ビュー:" & secvi.name & vbCrLf & _
          "断面元ビュー:" & refvi.name & vbCrLf & _
          "断面元の断面数:" & seccnt
    MsgBox msg
    
End Sub

Private Function GetSectCount( _
    vi As DrawingView) As Long
    
    CATIA.HSOSynchronized = False
    
    Dim sel As selection
    Set sel = CATIA.ActiveDocument.selection
    
    With sel
        .Clear
        .Add vi
        .Search "(CATDrwSearch.DrwCallout),sel"
        GetSectCount = .Count2
        .Clear
    End With
    
    CATIA.HSOSynchronized = True
    
End Function

Private Function SelViewSection( _
    ByVal msg) As DrawingView
    
    Set SelViewSection = Nothing
    Dim vi As DrawingView
    
Continue:
    Set vi = SelectItem(msg, "DrawingView")
    If vi Is Nothing Then Exit Function
    
    If vi.ViewType = catViewSection Then
        Set SelViewSection = vi
        Exit Function
    End If
    
    MsgBox "断面のビューを選択してください"
    GoTo Continue
End Function

断面元のビューの特定は可能ですが、断面のライン自体が取得出来ませんでした。
(Arrowは、本当に矢印の要素でした)

可能な事は、上記で示したとおり検索でヒットさせる方法ですが
ここからオブジェクトを取得しても、DrawingViewとなってしまい
実質マクロで扱うのは不可能だと判断しました。

「どうしても」となれば、3Dとのリンクを分断することで断面の線が
単なる線となる為、これを何かしらの方法で座標値を見つける事が
出来るかも知れませんが、リンクを切るのはリスクの方が大きいようにも
感じます。(マクロでUndoを行えば、戻るのは確かですが・・・)

安全を考慮してビュー自体を何処かにコピペして、分断出来れば
良いのですが、ビューのコピペでは断面の線はコピー出来ないようなので
お手上げです。