47 lines
2.4 KiB
VB.net
47 lines
2.4 KiB
VB.net
' 诊断 2: 批处理下 Work=NULL — 验证 (a) BasePart 直接转 Part 操作 (b) SetDisplay 签名
|
|
Option Strict Off
|
|
Imports System
|
|
Imports System.IO
|
|
Imports System.Text
|
|
Imports NXOpen
|
|
Imports NXOpen.UF
|
|
|
|
Module DebugSave
|
|
Sub Main()
|
|
Dim lw As ListingWindow = Session.GetSession().ListingWindow
|
|
lw.Open()
|
|
Dim sb As New StringBuilder()
|
|
Dim outPath As String = Path.Combine(Directory.GetCurrentDirectory(), "KC_master.prt")
|
|
sb.AppendLine("CWD=" & Directory.GetCurrentDirectory())
|
|
|
|
' (a) SetDisplay 签名反射
|
|
Dim pc As NXOpen.PartCollection = Session.GetSession().Parts
|
|
For Each mi As System.Reflection.MethodInfo In pc.GetType().GetMethods()
|
|
If mi.Name = "SetDisplay" OrElse mi.Name = "Open" Then sb.AppendLine("SIG: " & mi.ToString())
|
|
Next
|
|
|
|
Dim partLoadStatus1 As NXOpen.PartLoadStatus = Nothing
|
|
Dim basePart1 As NXOpen.BasePart = Session.GetSession().Parts.OpenBaseDisplay(outPath, partLoadStatus1)
|
|
sb.AppendLine("basePart1=" & (If(basePart1 Is Nothing, "NULL", basePart1.FullPath)))
|
|
sb.AppendLine("Work=" & (If(Session.GetSession().Parts.Work Is Nothing, "NULL", "非空")))
|
|
|
|
' (b) 直接转换 BasePart → Part 并操作
|
|
Dim p1 As Part = CType(basePart1, Part)
|
|
sb.AppendLine("p1 cast ok, FullPath=" & p1.FullPath & " IsModified(before)=" & p1.IsModified)
|
|
Dim ufs As UFSession = UFSession.GetUFSession()
|
|
ufs.Modl.EditExp("bore=50")
|
|
ufs.Modl.Update()
|
|
sb.AppendLine("p1.IsModified(after EditExp+Update)=" & p1.IsModified)
|
|
' 对比 Save 与 SaveAs 在批处理下的落盘行为
|
|
Dim pss As NXOpen.PartSaveStatus = p1.Save(NXOpen.BasePart.SaveComponents.True, NXOpen.BasePart.CloseAfterSave.False)
|
|
If pss IsNot Nothing Then pss.Dispose()
|
|
sb.AppendLine("after Save: size=" & (New FileInfo(outPath)).Length & " mtime=" & File.GetLastWriteTime(outPath))
|
|
Dim asPath As String = Path.Combine(Directory.GetCurrentDirectory(), "KC_master_as.prt")
|
|
Dim pss2 As NXOpen.PartSaveStatus = p1.SaveAs(asPath)
|
|
If pss2 IsNot Nothing Then pss2.Dispose()
|
|
sb.AppendLine("after SaveAs: exists=" & File.Exists(asPath) & " size=" & (If(File.Exists(asPath), (New FileInfo(asPath)).Length, 0)))
|
|
File.WriteAllText(Path.Combine(Directory.GetCurrentDirectory(), "debug-save.txt"), sb.ToString(), Encoding.UTF8)
|
|
lw.WriteLine(sb.ToString())
|
|
End Sub
|
|
End Module
|