Clean up sheet metal flat pattern
Here is a journal submitted by user hppianoman. The intended use is to clean up the sheet metal flat pattern before performing a DXF export for further processing. The journal performs the following steps:
- Rename the "flat-pattern" modeling view in order to remove the random number NX puts on the end.
- Replace the current view with the flat-pattern view as the "work" view.
- Select all lines and arcs of the flat-pattern and copy them to the clipboard.
- Replace the flat-pattern view with the "top" view as the "work view.
- Select all features of the model history and delete everything.
- Make layer 204 the working view.
- Paste the lines and arcs of the flat-pattern from the clipboard to the top view.
- Orient the WCS to the Absolute Csys.
- Fit to screen.
The journal was written and tested on NX 7.5.
'CleanUp Program to clean up CAD models in NX in order to prepare the flat pattern for DXF creation for the NC programming software. 'This program will: '1. Rename the "flat-pattern" modeling view in order to remove the random number NX puts on the end. '2. Replace the current view with the flat-pattern view as the "work" view. '3. Select all lines and arcs of the flat-pattern and copy them to the clipboard. '4. Replace the flat-pattern view with the "top" view as the "work view. '5. Select all features of the model history and delete everything. '6. Make layer 204 the working view. '7. Paste the lines and arcs of the flat-pattern from the clipboard to the top view. '8. Orient the WCS to the Absolute Csys. '9. Fit to screen. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'General imports needed at the beginning of the program Option Strict Off Imports System Imports NXOpen Imports NXOpenUI Imports NXOpen.Features Module NXJournal Sub Main() 'Declarations needed at the beginning of each program to tell the program what NX session to be working in, and what part is the working part. Dim theSession As Session = Session.GetSession() Dim workPart As Part = theSession.Parts.Work ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Declarations in order to Pause the program during testing. 'Dim theUI As UI = UI.GetUI() 'Dim Message As String 'Message = "Code is good to here." ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Rename "FLAT-PATTERN-#" Modeling view to just "FLAT-PATTERN"; without the random number on the end. For Each obj As NXObject In workPart.ModelingViews If obj.Name.Contains("FLAT-PATTERN") Then obj.SetName("FLAT-PATTERN") End If Next 'theUI.NXMessageBox.Show("Information", NXMessageBox.DialogType.Information, "Just finished renaming the FLAT-PATTERN, OK?") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'REPLACE THE CURRENT VIEW WITH THE FLAT-PATTERN VIEW Dim markID1 As Session.UndoMarkId markID1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Replace View") Dim layout1 As Layout = CType(workPart.Layouts.FindObject("L1"), Layout) Dim modelingView1 As ModelingView = CType(workPart.ModelingViews.FindObject("FLAT-PATTERN"), ModelingView) layout1.ReplaceView(workPart.ModelingViews.WorkView, modelingView1, True) 'theUI.NXMessageBox.Show("Information", NXMessageBox.DialogType.Information, "Just finished replacing the default view with the FLAT-PATTERN, OK?") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'SELECT ALL ARCS AND LINES IN FLAT PATTERN GEOMETRY IN ORDER TO COPY THEM TO THE CLIPBOARD Dim markID3 As Session.UndoMarkId markID3 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Copy") 'Loop to remove bend tangency lines on layer 102" For Each obj As DisplayableObject In theSession.Parts.Work.Curves If TypeOf obj Is Line Then If obj.Layer = 102 Then obj.Blank() End If End If Next 'Dim lw As ListingWindow = theSession.ListingWindow 'lw.Open() Dim copycutBuilder1 As Gateway.CopyCutBuilder copycutBuilder1 = workPart.ClipboardOperationsManager.CreateCopyCutBuilder() copycutBuilder1.CanCopyAsSketch = True copycutBuilder1.IsCut = False copycutBuilder1.ToClipboard = True copycutBuilder1.DestinationFilename = Nothing Dim flatPatternEntities() As NXObject For Each myFeature As Feature In workPart.Features.GetFeatures() If myFeature.FeatureType = "FLAT-PATTERN" Then Dim myFlatPattern As FlatPattern = myFeature 'lw.WriteLine("flat pattern found, feature number: " & myFeature.GetFeatureName) flatPatternEntities = myFlatPattern.GetCurves 'lw.WriteLine("Entity Count: " & flatPatternEntities.Length) End If Next 'lw.Close() If flatPatternEntities.Length > 0 Then copycutBuilder1.SetObjects(flatPatternEntities) Dim nxObject1 As NXObject nxObject1 = copycutBuilder1.Commit() End If copycutBuilder1.Destroy() 'theUI.NXMessageBox.Show("Information", NXMessageBox.DialogType.Information, "Just finished copying to clipboard, OK?") ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'REPLACE THE "FLAT PATTERN" VIEW WITH THE "TOP" VIEW AS THE "WORK" VIEW. Dim markID4 As Session.UndoMarkId markID4 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Replace View") Dim layout2 As Layout = CType(workPart.Layouts.FindObject("L1"), Layout) Dim modelingView2 As ModelingView = CType(workPart.ModelingViews.FindObject("TOP"), ModelingView) layout2.ReplaceView(workPart.ModelingViews.WorkView, modelingView2, True) 'theUI.NXMessageBox.Show("Information", NXMessageBox.DialogType.Information, "Just finished replacing the FLAT-PATTERN with the TOP view, OK?") ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'DELETE ALL GEOMETRY IN ORDER TO BE ABLE TO PASTE FLAT PATTERN BACK TO SCREEN Dim notifyOnDelete1 As Boolean notifyOnDelete1 = theSession.Preferences.Modeling.NotifyOnDelete theSession.UpdateManager.ClearErrorList() Dim markID5 As Session.UndoMarkId markID5 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Delete") Dim featureLength As Integer featureLength = 0 For Each obj As NXObject In theSession.Parts.Work.Sketches If TypeOf obj Is Sketch Then featureLength = featureLength + 1 End If Next For Each obj As NXObject In theSession.Parts.Work.Features If TypeOf obj Is Feature Then featureLength = featureLength + 1 End If Next Dim objects2(featureLength) As NXObject Dim featureJournalID As String Dim i2 As Integer i2 = 0 For Each obj As NXObject In theSession.Parts.Work.Sketches If TypeOf obj Is Sketch Then featureJournalID = obj.JournalIdentifier objects2(i2) = CType(workPart.Sketches.FindObject(featureJournalID), Sketch) i2 = i2 + 1 End If Next For Each obj As NXObject In theSession.Parts.Work.Features If TypeOf obj Is Feature Then featureJournalID = obj.JournalIdentifier objects2(i2) = CType(workPart.Features.FindObject(featureJournalID), Feature) i2 = i2 + 1 End If Next Dim Errs1 As Integer Errs1 = theSession.UpdateManager.AddToDeleteList(objects2) Dim notifyOnDelete2 As Boolean notifyOnDelete2 = theSession.Preferences.Modeling.NotifyOnDelete Dim Errs2 As Integer Errs2 = theSession.UpdateManager.DoUpdate(markID5) 'theUI.NXMessageBox.Show("Information", NXMessageBox.DialogType.Information, "You should have just deleted all geometry. OK?") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'MAKE LAYER 204 THE WORKING LAYER Dim markID10 As Session.UndoMarkId markID10 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Start") 'theSession.SetUndoMark(markID10, "Layer Settings Dialog") Dim stateArray1(1) As Layer.StateInfo stateArray1(0).Layer = 1 stateArray1(0).State = Layer.State.Selectable stateArray1(1).Layer = 204 stateArray1(1).State = Layer.State.WorkLayer workPart.Layers.ChangeStates(stateArray1, True) 'theSession.SetUndoMarkName(markID10, "Layer Settings") theSession.DeleteUndoMark(markID10, Nothing) 'theUI.NXMessageBox.Show("Information", NXMessageBox.DialogType.Information, "Just made layer 204 the working layer, OK?") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'PASTE GEOMETRY FROM CLIPBOARD INTO TOP VIEW Dim markID8 As Session.UndoMarkId markID8 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Paste") Dim pasteBuilder1 As Gateway.PasteBuilder pasteBuilder1 = workPart.ClipboardOperationsManager.CreatePasteBuilder() Dim nxObject3 As NXObject nxObject3 = pasteBuilder1.Commit() pasteBuilder1.Destroy() 'theUI.NXMessageBox.Show("Information", NXMessageBox.DialogType.Information, "Just pasted part geometry into TOP view, OK?") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'FORMAT WCS: SET WCS TO ABSOLUTE Dim origin1 As Point3d = New Point3d(0.0, 0.0, 0.0) Dim matrix1 As Matrix3x3 matrix1.Xx = 1.0 matrix1.Xy = 0.0 matrix1.Xz = 0.0 matrix1.Yx = 0.0 matrix1.Yy = 1.0 matrix1.Yz = 0.0 matrix1.Zx = 0.0 matrix1.Zy = 0.0 matrix1.Zz = 1.0 workPart.WCS.SetOriginAndMatrix(origin1, matrix1) 'theUI.NXMessageBox.Show("Information", NXMessageBox.DialogType.Information, "Just set the WCS to Absolute, OK?") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'FIT MODELING VIEW modelingView2.Fit() 'theUI.NXMessageBox.Show("Information", NXMessageBox.DialogType.Information, "Just fit the modeling view to screen, OK?") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' End Sub End Module
Thank you, hppianoman for sharing your code with us!
If you would like to share some code that you have written, email it to: info@nxjournaling.com along with a short description of what it does and what version of NX you are using. Code submissions do not need to be entire working programs, if you have a function, subroutine, or class that you find useful - send it in!

Comments
Thanks
Thanks to NXJournaling in helping with the "Copy to Clipboard" section.
hppianoman