首次提交: OnebotCatalog 项目代码与文档(含 NX 按需生成服务二期、后台、一键启动)
This commit is contained in:
139
sample-data/tools/test-display-part.vb
Normal file
139
sample-data/tools/test-display-part.vb
Normal file
@@ -0,0 +1,139 @@
|
||||
' =============================================================================
|
||||
' 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 <this file>
|
||||
' Result: <cwd>\test-display-part.txt Products: <cwd>\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
|
||||
Reference in New Issue
Block a user