Measure Length Journal

I am trying to create a journal that will output the lengths of 28 lines in a sketch. My ideal would be that it creates a text file with the data but I could work with just the summary measure window.

I tried to record one a few times but the Measure / Length function does not work...

Any help would be greatly appreciated.

The code below should get you started; it looks at all the sketches in the current work part and reports the name and length of every line it finds.

Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.UF
Module Module1
    Dim theSession As Session = Session.GetSession()
    Dim theUfSession As UFSession = UFSession.GetUFSession()
    Dim theUI As UI = UI.GetUI()
    Dim lw As ListingWindow = theSession.ListingWindow
    Sub Main()
        Dim markId1 As Session.UndoMarkId
        markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "NXJ")
        For Each tempSketch As Sketch In theSession.Parts.Work.Sketches
            lw.WriteLine("sketch: " & tempSketch.Name)
            Dim sketchEnts() As NXObject = tempSketch.GetAllGeometry
            For Each tempObj As NXObject In sketchEnts
                If TypeOf (tempObj) Is Line Then
                    Dim tempLine As Line = tempObj
                    lw.WriteLine("line name: " & tempLine.Name)
                    lw.WriteLine("line length: " & tempLine.GetLength.ToString)
                End If
    End Sub
    Public Function GetUnloadOption(ByVal dummy As String) As Integer
        'Unloads the image immediately after execution within NX
        GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately
    End Function
End Module

WOW you guys are quick! Thank you for the support.

After trying it I realize I get a mish mosh of data. So I renamed the lines EEAngle1 - 7, DEAngle1 - 7, EEWrap1 - 7, and DEWrap1 - 7.

Is there a way to have the output list the data in this form:

EEAngle1 =
EEAngle2 =
EEAngle3 =


DEWrap6 =
DEWrap7 =



One way to handle this would be to add the line objects to a list then sort the list based on the .Name property. The article linked below shows how to sort a list of NX objects based on a property:

Would it be easier to output the length of each line in the previous code?


Once you have a sorted list, you can process the list in order to report the line names, lengths, and any other property you are interested in.

Ok, how can I create a list of objects?


The "sort sheet names" section of the linked article shows how to add all the drawing sheets to a list object. Adding the line objects from sketches will be very similar. The code posted previously will immediately report the line name and length when a line is found. Instead of writing the info, add the line to the list. Once you have processed all the lines, you can sort the list and report the findings.

Adding the lines to a list would look something like (the "for each" loop is modified from what was previously posted):

Dim sketchLines as new list(of Line)
For Each tempObj As NXObject In sketchEnts
    If TypeOf (tempObj) Is Line Then
    End If

Is there a command to 'Save As' for the information window?


If you want to save the text written to the information window, change the output device type before that information is sent. See the "listing window overview" section of the article:

There is also UF_UI_save_listing_window. This lets you specify a filename, so it is essentially a "Save As" function.