C#ATIA

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

選択した円弧の長さを表示1

ちょっと相談?を頂いたので、久々にCATIAのマクロを書いてみました。

選択した3D円弧の長さを表示するだけのものです。
極端な話、こちらの物を流用しただけです。
線を選択しつつ、合計長さを表示する - C#ATIA

'vba  test_Circle_Length
'using-'KCL0.0.10'
'円弧の長さを表示

Option Explicit

Sub CATMain()
    'ドキュメントのチェック
    If Not CanExecute("PartDocument") Then Exit Sub
    
    '選択
    Dim msg$: msg = "円弧を選択して下さい : ESCキー 終了"
    Dim Elem As SelectedElement
    Dim Pt As Part
    Dim Ref As Reference
    Do
        Set Elem = KCL.SelectElement(msg, "HybridShape")
        If KCL.IsNothing(Elem) Then Exit Do
        Set Pt = Elem.Document.Part
        Set Ref = Elem.Reference
        If IsCircle(Ref, Pt.HybridShapeFactory) Then
            MsgBox "円弧長さは" & GetLength(Ref, Pt) & "mmです"
        Else
            MsgBox "円弧を選択してください"
        End If
    Loop
End Sub

'長さの取得
Private Function GetLength#(ByVal Ref As Reference, ByVal Pt As Part)
    GetLength = Pt.Parent.GetWorkbench("SPAWorkbench").GetMeasurable(Ref).Length
End Function

'円弧の判断
Private Function IsCircle(ByVal Ref As Reference, ByVal Fact As HybridShapeFactory) As Boolean
    Dim GeoType&: GeoType = Fact.GetGeometricalFeatureType(Ref)
    'AutomationManualの記述が間違えやすいが、
    '4-Circle になる
    IsCircle = IIf(GeoType = 4, True, False)
End Function

イロイロな事を忘れかけていました。

SelectElement2を利用する際のフィルターなのですが、今回や流用元では
"HybridShape" を利用しているのですが、選択する為の自由度と言いますか
柔軟性は "Edge" の方が良いのです。

が、その先の処理が思うように出来なかった為(リファレンスのタイプが異なる)
前回も "HybridShape" にしたんじゃないのかな? と薄っすらな記憶・・・。
CreateReferenceFromBRepNameが上手く取得出来れば、Edge" を利用したかった
のですが。