' ============================================================================= ' NX Journal: test whether batch-mode DisplayPart is empty (NX 2506) ' ' Hypothesis: ExportFrom=DisplayPart exports Session.Parts.Display, but in ' batch (run_journal) OpenBaseDisplay sets Work part WITHOUT setting the ' Display part -> Display is null -> translator sees 0 solids. ' ' This script: ' 1. OpenBaseDisplay -> print Work AND Display state ' 2. Try setting Display = workPart ' 3. Update + add to MODEL refset ' 4. DisplayPart STEP export (should now produce a real solid) ' ' Run: WorkingDirectory = catalog-masters\KC; run_journal.exe ' Result: \test-display-part.txt Products: \dbg_out\ ' ' Note: English comments only (avoids GBK/BOM mojibake on no-BOM .vb files). ' ============================================================================= Option Strict Off Imports System Imports System.IO Imports System.Text Imports NXOpen Imports NXOpen.UF Module TestDisplayPart Dim theSession As Session = Session.GetSession() Dim sb As New StringBuilder() Sub Log(s As String) sb.AppendLine(s) End Sub Sub Main() Try Run() Catch ex As Exception Log("[FATAL] " & ex.GetType().Name & " / " & ex.Message) End Try File.WriteAllText(Path.Combine(Directory.GetCurrentDirectory(), "test-display-part.txt"), sb.ToString(), New UTF8Encoding(True)) End Sub Function CountBodies(w As Part) As Integer Dim n As Integer = 0 Try For Each b As NXOpen.Body In w.Bodies n += 1 Next Catch End Try Return n End Function Function FileSize(p As String) As String If Not File.Exists(p) Then Return "MISSING" Return (New FileInfo(p)).Length & " bytes" End Function Sub Run() Dim cur As String = Directory.GetCurrentDirectory() Dim masterPath As String = Path.Combine(cur, "KC_master.prt") Log("masterExists=" & File.Exists(masterPath)) If Not File.Exists(masterPath) Then Return Dim pls As NXOpen.PartLoadStatus = Nothing theSession.Parts.OpenBaseDisplay(masterPath, pls) If pls IsNot Nothing Then pls.Dispose() Dim w As Part = theSession.Parts.Work If w Is Nothing Then Log("[FAIL] Work=NULL") Return End If Log("Work=" & w.FullPath) ' ---- KEY: state of the DISPLAY part ---- Try Dim disp As BasePart = theSession.Parts.Display Log("Display=" & (If(disp Is Nothing, "NULL", disp.FullPath))) Catch ex As Exception Log("Parts.Display get throws: " & ex.Message) End Try ' ---- try to SET Display = work part ---- Try theSession.Parts.Display = w Log("set Display=work OK") Catch ex As Exception Log("set Display=work FAIL: " & ex.Message) End Try Try Dim disp2 As BasePart = theSession.Parts.Display Log("Display(after set)=" & (If(disp2 Is Nothing, "NULL", disp2.FullPath))) Catch ex As Exception Log("Parts.Display get2 throws: " & ex.Message) End Try ' ---- Update + refset (align with the flow that produced a file) ---- Dim ufs As UFSession = UFSession.GetUFSession() ufs.Modl.Update() Log("afterUpdate bodies=" & CountBodies(w)) Try Dim bodyList As New System.Collections.Generic.List(Of NXOpen.NXObject)() For Each b As NXOpen.Body In w.Bodies bodyList.Add(b) Next For Each rs As NXOpen.ReferenceSet In w.GetAllReferenceSets() If rs.Name.ToUpperInvariant().Contains("MODEL") Then rs.AddObjectsToReferenceSet(bodyList.ToArray()) Exit For End If Next Log("refset bodies added") Catch ex As Exception Log("refset add FAIL: " & ex.Message) End Try ' ---- DisplayPart STEP export ---- Dim f As String = Path.Combine(cur, "dbg_out", "D_display.stp") Directory.CreateDirectory(Path.Combine(cur, "dbg_out")) If File.Exists(f) Then File.Delete(f) Try Dim sc As NXOpen.StepCreator = theSession.DexManager.CreateStepCreator() sc.ExportFrom = NXOpen.StepCreator.ExportFromOption.DisplayPart sc.ExportAs = NXOpen.StepCreator.ExportAsOption.Ap214 sc.OutputFile = f sc.ColorAndLayers = True sc.Commit() sc.Destroy() Log("D_display.stp size=" & FileSize(f)) Catch ex As Exception Log("D_display FAIL: " & ex.Message) End Try Log("DONE") End Sub End Module