117 lines
3.9 KiB
Python
117 lines
3.9 KiB
Python
|
|
"""
|
||
|
|
Simple NX Journal Script to Just Solve Simulation
|
||
|
|
|
||
|
|
This is a simplified version that just opens and solves the simulation
|
||
|
|
without trying to update linked parts (for simple models).
|
||
|
|
|
||
|
|
Usage: run_journal.exe solve_simulation_simple.py <sim_file_path>
|
||
|
|
"""
|
||
|
|
|
||
|
|
import sys
|
||
|
|
import NXOpen
|
||
|
|
import NXOpen.CAE
|
||
|
|
|
||
|
|
|
||
|
|
def main(args):
|
||
|
|
"""
|
||
|
|
Open and solve a simulation file without updates.
|
||
|
|
|
||
|
|
Args:
|
||
|
|
args: Command line arguments
|
||
|
|
args[0]: .sim file path
|
||
|
|
"""
|
||
|
|
if len(args) < 1:
|
||
|
|
print("ERROR: No .sim file path provided")
|
||
|
|
return False
|
||
|
|
|
||
|
|
sim_file_path = args[0]
|
||
|
|
|
||
|
|
print(f"[JOURNAL] Opening simulation: {sim_file_path}")
|
||
|
|
|
||
|
|
try:
|
||
|
|
theSession = NXOpen.Session.GetSession()
|
||
|
|
|
||
|
|
# Set load options to load linked parts from directory
|
||
|
|
print("[JOURNAL] Setting load options for linked parts...")
|
||
|
|
import os
|
||
|
|
working_dir = os.path.dirname(os.path.abspath(sim_file_path))
|
||
|
|
|
||
|
|
# Complete load options setup
|
||
|
|
theSession.Parts.LoadOptions.LoadLatest = False
|
||
|
|
theSession.Parts.LoadOptions.ComponentLoadMethod = NXOpen.LoadOptions.LoadMethod.FromDirectory
|
||
|
|
|
||
|
|
searchDirectories = [working_dir]
|
||
|
|
searchSubDirs = [True]
|
||
|
|
theSession.Parts.LoadOptions.SetSearchDirectories(searchDirectories, searchSubDirs)
|
||
|
|
|
||
|
|
theSession.Parts.LoadOptions.ComponentsToLoad = NXOpen.LoadOptions.LoadComponents.All
|
||
|
|
theSession.Parts.LoadOptions.PartLoadOption = NXOpen.LoadOptions.LoadOption.FullyLoad
|
||
|
|
theSession.Parts.LoadOptions.SetInterpartData(True, NXOpen.LoadOptions.Parent.All)
|
||
|
|
theSession.Parts.LoadOptions.AllowSubstitution = False
|
||
|
|
theSession.Parts.LoadOptions.GenerateMissingPartFamilyMembers = True
|
||
|
|
theSession.Parts.LoadOptions.AbortOnFailure = False
|
||
|
|
|
||
|
|
referenceSets = ["As Saved", "Use Simplified", "Use Model", "Entire Part", "Empty"]
|
||
|
|
theSession.Parts.LoadOptions.SetDefaultReferenceSets(referenceSets)
|
||
|
|
theSession.Parts.LoadOptions.ReferenceSetOverride = False
|
||
|
|
|
||
|
|
print(f"[JOURNAL] Load directory set to: {working_dir}")
|
||
|
|
|
||
|
|
# Close any currently open parts
|
||
|
|
print("[JOURNAL] Closing any open parts...")
|
||
|
|
try:
|
||
|
|
partCloseResponses1 = [NXOpen.BasePart.CloseWholeTree]
|
||
|
|
theSession.Parts.CloseAll(partCloseResponses1)
|
||
|
|
except:
|
||
|
|
pass
|
||
|
|
|
||
|
|
# Open the .sim file
|
||
|
|
print(f"[JOURNAL] Opening simulation...")
|
||
|
|
basePart1, partLoadStatus1 = theSession.Parts.OpenActiveDisplay(
|
||
|
|
sim_file_path,
|
||
|
|
NXOpen.DisplayPartOption.AllowAdditional
|
||
|
|
)
|
||
|
|
|
||
|
|
workSimPart = theSession.Parts.BaseWork
|
||
|
|
partLoadStatus1.Dispose()
|
||
|
|
|
||
|
|
# Switch to simulation application
|
||
|
|
theSession.ApplicationSwitchImmediate("UG_APP_SFEM")
|
||
|
|
|
||
|
|
simPart1 = workSimPart
|
||
|
|
theSession.Post.UpdateUserGroupsFromSimPart(simPart1)
|
||
|
|
|
||
|
|
# Solve the simulation directly
|
||
|
|
print("[JOURNAL] Starting solve...")
|
||
|
|
markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start")
|
||
|
|
theSession.SetUndoMarkName(markId3, "Solve Dialog")
|
||
|
|
|
||
|
|
markId5 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Solve")
|
||
|
|
|
||
|
|
theCAESimSolveManager = NXOpen.CAE.SimSolveManager.GetSimSolveManager(theSession)
|
||
|
|
|
||
|
|
# Get the first solution from the simulation
|
||
|
|
simSimulation1 = workSimPart.FindObject("Simulation")
|
||
|
|
simSolution1 = simSimulation1.FindObject("Solution[Solution 1]")
|
||
|
|
|
||
|
|
solution_solves = [simSolution1]
|
||
|
|
|
||
|
|
print("[JOURNAL] Submitting solve...")
|
||
|
|
theCAESimSolveManager.SubmitSolves(solution_solves)
|
||
|
|
|
||
|
|
theSession.DeleteUndoMark(markId5, "Solve")
|
||
|
|
|
||
|
|
print("[JOURNAL] Solve submitted successfully!")
|
||
|
|
return True
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
print(f"[JOURNAL] ERROR: {e}")
|
||
|
|
import traceback
|
||
|
|
traceback.print_exc()
|
||
|
|
return False
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
success = main(sys.argv[1:])
|
||
|
|
sys.exit(0 if success else 1)
|