ちょっと相談?を頂いたので、久々に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" を利用したかった
のですが。