From b35e4adc130c30fd17932b86868f4338900d4d77 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Fri, 22 Mar 2024 09:58:50 +0100 Subject: [PATCH] Assembly: Solve on recompute. Fixes #12983 --- src/Mod/Assembly/App/AssemblyObject.cpp | 13 +++++++++++++ src/Mod/Assembly/App/AssemblyObject.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/src/Mod/Assembly/App/AssemblyObject.cpp b/src/Mod/Assembly/App/AssemblyObject.cpp index f5c498ee68..bf52210803 100644 --- a/src/Mod/Assembly/App/AssemblyObject.cpp +++ b/src/Mod/Assembly/App/AssemblyObject.cpp @@ -101,6 +101,17 @@ PyObject* AssemblyObject::getPyObject() return Py::new_reference_to(PythonObject); } +App::DocumentObjectExecReturn* AssemblyObject::execute() +{ + App::DocumentObjectExecReturn* ret = App::Part::execute(); + + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath( + "User parameter:BaseApp/Preferences/Mod/Assembly"); + if (hGrp->GetBool("SolveOnRecompute", true)) { + solve(); + } + return ret; +} int AssemblyObject::solve(bool enableRedo) { @@ -299,6 +310,7 @@ void AssemblyObject::setNewPlacements() Base::Placement newPlacement = Base::Placement(pos, rot); propPlacement->setValue(newPlacement); + obj->purgeTouched(); } } @@ -316,6 +328,7 @@ void AssemblyObject::redrawJointPlacements(std::vector joi if (propPlacement) { propPlacement->setValue(propPlacement->getValue()); } + joint->purgeTouched(); } } diff --git a/src/Mod/Assembly/App/AssemblyObject.h b/src/Mod/Assembly/App/AssemblyObject.h index c82d165501..8d0a48d8c5 100644 --- a/src/Mod/Assembly/App/AssemblyObject.h +++ b/src/Mod/Assembly/App/AssemblyObject.h @@ -133,6 +133,8 @@ public: return "AssemblyGui::ViewProviderAssembly"; } + App::DocumentObjectExecReturn* execute() override; + /* Solve the assembly. It will update first the joints, solve, update placements of the parts and redraw the joints Args : enableRedo : This store initial positions to enable undo while being in an active transaction (joint creation).*/