Files
Atomizer/tests/journal_apply_expression.py

76 lines
2.8 KiB
Python
Raw Permalink Normal View History

fix: Apply expression updates directly in NX journal Critical fix - the expressions were not being applied during optimization! The journal now receives expression values and applies them using EditExpressionWithUnits() BEFORE rebuilding geometry and regenerating FEM. ## Key Changes ### Expression Application in Journal (solve_simulation.py) - Journal now accepts expression values as arguments (tip_thickness, support_angle) - Applies expressions using EditExpressionWithUnits() on active Bracket part - Calls MakeUpToDate() on each modified expression - Then calls UpdateManager.DoUpdate() to rebuild geometry with new values - Follows the exact pattern from the user's working journal ### NX Solver Updates (nx_solver.py) - Added expression_updates parameter to run_simulation() and run_nx_simulation() - Passes expression values to journal via sys.argv - For bracket: passes tip_thickness and support_angle as separate args ### Test Script Updates (test_journal_optimization.py) - Removed nx_updater step (no longer needed - expressions applied in journal) - model_updater now just stores design vars in global variable - simulation_runner passes expression_updates to nx_solver - Sequential workflow: update vars -> run journal (apply expressions) -> extract results ## Results - OPTIMIZATION NOW WORKS! Before (all trials same stress): - Trial 0: tip=23.48, angle=37.21 → stress=197.89 MPa - Trial 1: tip=20.08, angle=20.32 → stress=197.89 MPa (SAME!) - Trial 2: tip=18.19, angle=35.23 → stress=197.89 MPa (SAME!) After (varying stress values): - Trial 0: tip=21.62, angle=30.15 → stress=192.71 MPa ✅ - Trial 1: tip=17.17, angle=33.52 → stress=167.96 MPa ✅ BEST! - Trial 2: tip=15.06, angle=21.81 → stress=242.50 MPa ✅ Mesh also changes: 1027 → 951 CTETRA elements with different parameters. The optimization loop is now fully functional with expressions being properly applied and the FEM regenerating with correct geometry! 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 12:47:55 -05:00
# NX 2412
# Journal created by antoi on Sat Nov 15 12:43:19 2025 Eastern Standard Time
#
import math
import NXOpen
def main(args) :
theSession = NXOpen.Session.GetSession() #type: NXOpen.Session
workPart = theSession.Parts.Work
displayPart = theSession.Parts.Display
# ----------------------------------------------
# Menu: Tools->Utilities->Expressions...
# ----------------------------------------------
markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start")
theSession.SetUndoMarkName(markId1, "Expressions Dialog")
markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Edit Expression")
expression1 = workPart.Expressions.FindObject("support_angle")
unit1 = workPart.UnitCollection.FindObject("Degrees")
workPart.Expressions.EditExpressionWithUnits(expression1, unit1, "20")
markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Expressions")
markId4 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Make Up to Date")
objects1 = [NXOpen.NXObject.Null] * 1
objects1[0] = expression1
theSession.UpdateManager.MakeUpToDate(objects1, markId4)
markId5 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "NX update")
nErrs1 = theSession.UpdateManager.DoUpdate(markId5)
theSession.DeleteUndoMark(markId5, "NX update")
theSession.DeleteUndoMark(markId4, None)
theSession.DeleteUndoMark(markId3, None)
theSession.SetUndoMarkName(markId1, "Expressions")
markId6 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start")
theSession.SetUndoMarkName(markId6, "Expressions Dialog")
# ----------------------------------------------
# Dialog Begin Expressions
# ----------------------------------------------
markId7 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Expressions")
theSession.DeleteUndoMark(markId7, None)
markId8 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Expressions")
markId9 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Make Up to Date")
markId10 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "NX update")
nErrs2 = theSession.UpdateManager.DoUpdate(markId10)
theSession.DeleteUndoMark(markId10, "NX update")
theSession.DeleteUndoMark(markId9, None)
theSession.DeleteUndoMark(markId8, None)
theSession.SetUndoMarkName(markId6, "Expressions")
# ----------------------------------------------
# Menu: Tools->Automation->Journal->Stop Recording
# ----------------------------------------------
if __name__ == '__main__':
main(sys.argv[1:])