""" 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 """ 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)