Code:
Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.UI
Imports NXOpen.UFModule report_radius_of_circle_or_circular_edge
Sub Main
Dim theSession As Session = Session.GetSession()
Dim theUI As UI = UI.GetUI()
Dim lw As ListingWindow = theSession.ListingWindow()
Dim obj As NXObject
While select_a_circular_object(obj) = Selection.Response.Ok
Dim rad as double
If obj.GetType().ToString() = "NXOpen.Arc" Then
Dim my_arc as arc = ctype(obj, arc)
rad = my_arc.radius
Else
rad = get_edge_radius(obj.Tag)
End If
lw.Open()
lw.WriteLine("Radius: " + rad.ToString())
End While
End Sub
Function select_a_circular_object(ByRef obj As NXObject)
Dim ui As UI = ui.GetUI()
Dim message As String = "Select a circular object"
Dim title As String = "Selection"
Dim selectionMask(1) As Selection.MaskTriple
With selectionMask(0)
.Type = UFConstants.UF_solid_type
.Subtype = UFConstants.UF_solid_edge_subtype
.SolidBodySubtype = UFConstants.UF_UI_SEL_FEATURE_CIRCULAR_EDGE
End With
With selectionMask(1)
.Type = UFConstants.UF_circle_type
.Subtype = 0
.SolidBodySubtype = 0
End With
Dim cursor As Point3d = Nothing
Dim resp As Selection.Response = _
ui.SelectionManager.SelectObject(message, title, _
Selection.SelectionScope.WorkPart, _
Selection.SelectionAction.ClearAndEnableSpecific, _
False, False, selectionMask, obj, cursor)
If resp = Selection.Response.ObjectSelected Or _
resp = Selection.Response.ObjectSelectedByName Then
return Selection.Response.Ok
Else
return Selection.Response.Cancel
End If
End Function
Function get_edge_radius(ByVal edge_tag As Tag) As double
Dim theUFSession As UFSession = UFSession.GetUFSession()
Dim arc_evaluator As System.IntPtr
Dim arc_data As NXOpen.UF.UFEval.Arc
theUFSession.Eval.Initialize(edge_tag, arc_evaluator)
theUFSession.Eval.AskArc(arc_evaluator, arc_data)
theUFSession.UF.Free(arc_evaluator)
Return arc_data.radius
End Function
End Module