diff --git a/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp b/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp index a5caec7e04..e67dea1e4f 100644 --- a/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp +++ b/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp @@ -40,6 +40,7 @@ #include "ViewProviderSketch.h" #include "GeometryCreationMode.h" +#include "CommandConstraints.h" using namespace std; using namespace SketcherGui; @@ -143,12 +144,8 @@ void CmdSketcherToggleConstruction::activated(int iMsg) } // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); + + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); diff --git a/src/Mod/Sketcher/Gui/CommandConstraints.cpp b/src/Mod/Sketcher/Gui/CommandConstraints.cpp index 9270f61a9a..a0065f5228 100644 --- a/src/Mod/Sketcher/Gui/CommandConstraints.cpp +++ b/src/Mod/Sketcher/Gui/CommandConstraints.cpp @@ -163,43 +163,29 @@ void openEditDatumDialog(Sketcher::SketchObject* sketch, int ConstrNbr) ConstrNbr, escapedstr.c_str()); } Gui::Command::commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); if (sketch->noRecomputes && sketch->ExpressionEngine.depsAreTouched()) { sketch->ExpressionEngine.execute(); sketch->solve(); } - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } catch (const Base::Exception& e) { QMessageBox::critical(qApp->activeWindow(), QObject::tr("Dimensional constraint"), QString::fromUtf8(e.what())); Gui::Command::abortCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - else - sketch->solve(); // we have to update the solver after this aborted addition. + + sketch->solve(); // we have to update the solver after this aborted addition. + tryAutoRecompute(); } } } else { // command canceled Gui::Command::abortCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // upon cancelling we have to solve again to remove the constraint from the solver - Gui::Command::updateActive(); - else - sketch->solve(); // we have to update the solver after this aborted addition. + + sketch->solve(); // we have to update the solver after this aborted addition. + tryAutoRecompute(); } } } @@ -234,12 +220,7 @@ void finishDistanceConstraint(Gui::Command* cmd, Sketcher::SketchObject* sketch, cmd->commitCommand(); } - //ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - + tryAutoRecompute(); cmd->getSelection().clearSelection(); } @@ -395,22 +376,12 @@ void SketcherGui::makeTangentToEllipseviaNewPoint(const Sketcher::SketchObject* Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - + tryAutoRecompute(); return; } Gui::Command::commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } /// Makes a simple tangency constraint using extra point + tangent via point @@ -468,23 +439,13 @@ void SketcherGui::makeTangentToArcOfEllipseviaNewPoint(const Sketcher::SketchObj catch (const Base::Exception& e) { Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - + + tryAutoRecompute(); return; } Gui::Command::commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } /// Makes a simple tangency constraint using extra point + tangent via point @@ -560,22 +521,13 @@ void SketcherGui::makeTangentToArcOfHyperbolaviaNewPoint(const Sketcher::SketchO Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - + tryAutoRecompute(); return; } Gui::Command::commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } /// Makes a simple tangency constraint using extra point + tangent via point @@ -656,22 +608,12 @@ void SketcherGui::makeTangentToArcOfParabolaviaNewPoint(const Sketcher::SketchOb Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - + tryAutoRecompute(); return; } Gui::Command::commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } std::string SketcherGui::getStrippedPythonExceptionString(const Base::Exception e) @@ -685,6 +627,14 @@ std::string SketcherGui::getStrippedPythonExceptionString(const Base::Exception return msg; } +void SketcherGui::tryAutoRecompute() +{ + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + bool autoRecompute = hGrp->GetBool("AutoRecompute",false); + + if (autoRecompute) + Gui::Command::updateActive(); +} namespace SketcherGui { @@ -1255,11 +1205,7 @@ void CmdSketcherConstrainHorizontal::activated(int iMsg) // finish the transaction and update commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -1307,11 +1253,7 @@ void CmdSketcherConstrainHorizontal::applyConstraint(std::vector &sel // finish the transaction and update Gui::Command::commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } break; @@ -1493,11 +1435,7 @@ void CmdSketcherConstrainVertical::activated(int iMsg) // finish the transaction and update commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -1544,12 +1482,7 @@ void CmdSketcherConstrainVertical::applyConstraint(std::vector &selSe sketchgui->getObject()->getNameInDocument(),CrvId); // finish the transaction and update Gui::Command::commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } break; @@ -1741,12 +1674,7 @@ void CmdSketcherConstrainLock::activated(int iMsg) // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -2046,11 +1974,7 @@ void CmdSketcherConstrainCoincident::activated(int iMsg) else abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -2634,13 +2558,9 @@ void CmdSketcherConstrainPointOnObject::applyConstraint(std::vector & sketchgui->getObject()->getNameInDocument(), GeoIdVt, PosIdVt, GeoIdCrv); commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - } else { + tryAutoRecompute(); + } + else { abortCommand(); QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("None of the selected points were constrained onto the respective curves, either " @@ -3284,12 +3204,7 @@ void CmdSketcherConstrainParallel::activated(int iMsg) // finish the transaction and update commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -3323,12 +3238,7 @@ void CmdSketcherConstrainParallel::applyConstraint(std::vector &selSe sketchgui->getObject()->getNameInDocument(), GeoId1, GeoId2); // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } } @@ -3512,23 +3422,13 @@ void CmdSketcherConstrainPerpendicular::activated(int iMsg) QObject::tr("Error"), QString::fromLatin1(e.what())); Gui::Command::abortCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - + + tryAutoRecompute(); return; } commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); @@ -3568,12 +3468,7 @@ void CmdSketcherConstrainPerpendicular::activated(int iMsg) Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Perpendicular',%d,%d,%d,%d)) ", selection[0].getFeatName(),GeoId1,PosId1,GeoId2,PosId2); commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); return; @@ -3605,12 +3500,7 @@ void CmdSketcherConstrainPerpendicular::activated(int iMsg) Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Perpendicular',%d,%d,%d)) ", selection[0].getFeatName(),GeoId1,PosId1,GeoId2); commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); return; @@ -3742,22 +3632,12 @@ void CmdSketcherConstrainPerpendicular::activated(int iMsg) Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - + tryAutoRecompute(); return; } commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); return; @@ -3769,12 +3649,7 @@ void CmdSketcherConstrainPerpendicular::activated(int iMsg) Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Perpendicular',%d,%d)) ", selection[0].getFeatName(),GeoId1,GeoId2); commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); return; @@ -3931,11 +3806,7 @@ void CmdSketcherConstrainPerpendicular::applyConstraint(std::vector & } - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); return; @@ -3948,12 +3819,7 @@ void CmdSketcherConstrainPerpendicular::applyConstraint(std::vector & Obj->getNameInDocument(),GeoId1,GeoId2); commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - + tryAutoRecompute(); return; } case 4: // {SelVertexOrRoot, SelEdge, SelEdgeOrAxis} @@ -4016,22 +3882,12 @@ void CmdSketcherConstrainPerpendicular::applyConstraint(std::vector & QString::fromLatin1(e.what())); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - + tryAutoRecompute(); return; } commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); @@ -4179,22 +4035,12 @@ void CmdSketcherConstrainTangent::activated(int iMsg) QObject::tr("Error"), QString::fromLatin1(e.what())); Gui::Command::abortCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - return; + tryAutoRecompute(); + return; } commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); @@ -4234,12 +4080,7 @@ void CmdSketcherConstrainTangent::activated(int iMsg) Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Tangent',%d,%d,%d,%d)) ", selection[0].getFeatName(),GeoId1,PosId1,GeoId2,PosId2); commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); return; @@ -4271,12 +4112,7 @@ void CmdSketcherConstrainTangent::activated(int iMsg) Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Tangent',%d,%d,%d)) ", selection[0].getFeatName(),GeoId1,PosId1,GeoId2); commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); return; @@ -4391,12 +4227,7 @@ void CmdSketcherConstrainTangent::activated(int iMsg) Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Tangent',%d,%d)) ", selection[0].getFeatName(),GeoId1,GeoId2); commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); return; @@ -4535,12 +4366,7 @@ void CmdSketcherConstrainTangent::applyConstraint(std::vector &selSeq Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Tangent',%d,%d)) ", Obj->getNameInDocument(),GeoId1,GeoId2); commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); return; } @@ -4599,12 +4425,7 @@ void CmdSketcherConstrainTangent::applyConstraint(std::vector &selSeq Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Tangent',%d,%d,%d,%d)) ", Obj->getNameInDocument(),GeoId1,PosId1,GeoId2,PosId2); commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); return; @@ -4647,21 +4468,12 @@ void CmdSketcherConstrainTangent::applyConstraint(std::vector &selSeq QString::fromLatin1(e.what())); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - return; + tryAutoRecompute(); + return; } commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); getSelection().clearSelection(); @@ -4940,17 +4752,13 @@ void CmdSketcherConstrainRadius::activated(int iMsg) } commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); if (Obj->noRecomputes && Obj->ExpressionEngine.depsAreTouched()) { Obj->ExpressionEngine.execute(); Obj->solve(); } - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); commitNeeded=false; updateNeeded=false; @@ -4959,13 +4767,8 @@ void CmdSketcherConstrainRadius::activated(int iMsg) QMessageBox::critical(qApp->activeWindow(), QObject::tr("Dimensional constraint"), QString::fromUtf8(e.what())); abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - else - Obj->solve(); // we have to update the solver after this aborted addition. + Obj->solve(); // we have to update the solver after this aborted addition. + tryAutoRecompute(); } } else { @@ -4988,15 +4791,9 @@ void CmdSketcherConstrainRadius::activated(int iMsg) commitCommand(); if(updateNeeded) { - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - Obj->solve(); + Obj->solve(); + tryAutoRecompute(); } - } void CmdSketcherConstrainRadius::applyConstraint(std::vector &selSeq, int seqIndex) @@ -5091,15 +4888,12 @@ void CmdSketcherConstrainRadius::applyConstraint(std::vector &selSeq, commitCommand(); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - if (Obj->noRecomputes && Obj->ExpressionEngine.depsAreTouched()) { Obj->ExpressionEngine.execute(); Obj->solve(); } - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); commitNeeded=false; updateNeeded=false; @@ -5108,13 +4902,8 @@ void CmdSketcherConstrainRadius::applyConstraint(std::vector &selSeq, QMessageBox::critical(qApp->activeWindow(), QObject::tr("Dimensional constraint"), QString::fromUtf8(e.what())); abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); - else - Obj->solve(); // we have to update the solver after this aborted addition. + Obj->solve(); // we have to update the solver after this aborted addition. + tryAutoRecompute(); } } else { @@ -5136,12 +4925,8 @@ void CmdSketcherConstrainRadius::applyConstraint(std::vector &selSeq, commitCommand(); if(updateNeeded) { - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - Obj->solve(); + Obj->solve(); + tryAutoRecompute(); } } } @@ -5811,12 +5596,7 @@ void CmdSketcherConstrainEqual::activated(int iMsg) } // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -5843,12 +5623,7 @@ void CmdSketcherConstrainEqual::applyConstraint(std::vector &selSeq, Obj->getNameInDocument(), GeoId1, GeoId2); // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); return; } @@ -5959,13 +5734,7 @@ void CmdSketcherConstrainSymmetric::activated(int iMsg) // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -6016,13 +5785,7 @@ void CmdSketcherConstrainSymmetric::activated(int iMsg) // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -6038,13 +5801,7 @@ void CmdSketcherConstrainSymmetric::activated(int iMsg) // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -6104,12 +5861,7 @@ void CmdSketcherConstrainSymmetric::applyConstraint(std::vector &selS // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } else { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), @@ -6141,12 +5893,7 @@ void CmdSketcherConstrainSymmetric::applyConstraint(std::vector &selS // finish the transaction and update commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -6290,13 +6037,7 @@ void CmdSketcherConstrainSnellsLaw::activated(int iMsg) }*/ commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -6542,14 +6283,9 @@ void CmdSketcherConstrainInternalAlignment::activated(int iMsg) // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - + tryAutoRecompute(); + if(extra_elements){ QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Extra elements"), QObject::tr("More elements than possible for the given ellipse were provided. These were ignored.")); @@ -6706,13 +6442,9 @@ void CmdSketcherConstrainInternalAlignment::activated(int iMsg) // finish the transaction and update commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - + tryAutoRecompute(); + if(extra_elements){ QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Extra elements"), QObject::tr("More elements than possible for the given ellipse were provided. These were ignored.")); @@ -6847,11 +6579,7 @@ void CmdSketcherToggleDrivingConstraint::activated(int iMsg) else abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); diff --git a/src/Mod/Sketcher/Gui/CommandConstraints.h b/src/Mod/Sketcher/Gui/CommandConstraints.h index 0a5aa8446a..3e00a368ab 100644 --- a/src/Mod/Sketcher/Gui/CommandConstraints.h +++ b/src/Mod/Sketcher/Gui/CommandConstraints.h @@ -101,6 +101,10 @@ void makeTangentToArcOfParabolaviaNewPoint(const Sketcher::SketchObject* Obj, std::string getStrippedPythonExceptionString(const Base::Exception); +/// This function tries to auto-recompute the active document if the option +/// is set in the user parameter. If the option is not set nothing will be done +void tryAutoRecompute(); + } #endif // SKETCHERGUI_DrawSketchHandler_H diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index d4d521d9cc..745fa91e5a 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -52,6 +52,7 @@ #include "ViewProviderSketch.h" #include "DrawSketchHandler.h" +#include "CommandConstraints.h" #include #include @@ -360,19 +361,13 @@ public: sugConstr2.clear(); } - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); EditCurve.clear(); sketchgui->drawEdit(EditCurve); - //ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); - if(continuousMode){ // This code enables the continuous creation mode. Mode=STATUS_SEEK_First; @@ -602,18 +597,12 @@ public: createAutoConstraints(sugConstr2, getHighestCurveIndex() - 2, Sketcher::end); sugConstr2.clear(); } - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - //ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); - if(continuousMode){ // This code enables the continuous creation mode. Mode=STATUS_SEEK_First; @@ -1128,14 +1117,9 @@ public: lastCurve,lastEndPosId,firstCurve,firstPosId); } Gui::Command::commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); } ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); @@ -1221,13 +1205,8 @@ public: sugConstr2.clear(); } - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); // remember the vertex for the next rounds constraint.. previousCurve = getHighestCurveIndex(); @@ -1598,17 +1577,12 @@ public: sugConstr3.clear(); } - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - //ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); - if(continuousMode){ // This code enables the continuous creation mode. Mode=STATUS_SEEK_First; @@ -1914,18 +1888,12 @@ public: createAutoConstraints(sugConstr3, getHighestCurveIndex(), Sketcher::none); sugConstr3.clear(); } - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - //ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); - if(continuousMode){ // This code enables the continuous creation mode. Mode=STATUS_SEEK_First; @@ -2225,18 +2193,12 @@ public: createAutoConstraints(sugConstr2, getHighestCurveIndex(), Sketcher::none); sugConstr2.clear(); } - + + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - - //ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); - if(continuousMode){ // This code enables the continuous creation mode. Mode=STATUS_SEEK_First; @@ -3027,14 +2989,9 @@ private: Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + return; } @@ -3070,14 +3027,9 @@ private: sugConstr3.clear(); } } - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); // This code enables the continuous creation mode. if (constrMethod == 0) { @@ -3090,7 +3042,7 @@ private: editCurve.clear(); sketchgui->drawEdit(editCurve); - //ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); @@ -3455,13 +3407,8 @@ public: Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); return false; } @@ -3492,17 +3439,11 @@ public: sugConstr4.clear(); } + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - - //ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); - if(continuousMode){ // This code enables the continuous creation mode. Mode=STATUS_SEEK_First; @@ -3849,13 +3790,8 @@ public: Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); return false; } @@ -3886,15 +3822,10 @@ public: sugConstr4.clear(); } + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - - //ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); if(continuousMode){ @@ -4206,13 +4137,8 @@ public: Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if (autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); return false; } @@ -4243,16 +4169,11 @@ public: sugConstr4.clear(); } + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); - if (continuousMode) { // This code enables the continuous creation mode. Mode = STATUS_SEEK_First; @@ -4748,27 +4669,18 @@ public: Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); return false; } Gui::Command::commitCommand(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); if(continuousMode){ @@ -4818,15 +4730,10 @@ public: //sketchgui->getDocument()->undo(1); Gui::Command::abortCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - + + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + if(!continuousMode){ DrawSketchHandler::quit(); } @@ -5241,18 +5148,12 @@ public: createAutoConstraints(sugConstr3, getHighestCurveIndex(), Sketcher::none); sugConstr3.clear(); } - + + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - - //ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); - if(continuousMode){ // This code enables the continuous creation mode. Mode=STATUS_SEEK_First; @@ -5500,17 +5401,12 @@ public: createAutoConstraints(sugConstr, getHighestCurveIndex(), Sketcher::start); sugConstr.clear(); } - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); - if(continuousMode){ // This code enables the continuous creation mode. applyCursor(); @@ -5792,13 +5688,8 @@ public: Gui::Command::abortCommand(); } - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); } return true; } @@ -5854,11 +5745,7 @@ public: Gui::Command::abortCommand(); } - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); if(construction) { Gui::Command::doCommand(Gui::Command::Doc, @@ -6033,12 +5920,7 @@ public: sketchgui->getObject()->getNameInDocument(), GeoId, onSketchPos.x, onSketchPos.y); Gui::Command::commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } catch (const Base::Exception& e) { Base::Console().Error("Failed to trim edge: %s\n", e.what()); @@ -6607,19 +6489,13 @@ public: msg.pObjectName, msg.pSubName); Gui::Command::commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else { - // adding external geometry does not require a solve() per se (the DoF is the same), - // however a solve is required to update the amount of solver geometry, because we only - // redraw a changed Sketch if the solver geometry amount is the same as the SkethObject - // geometry amount (as this avoids other issues). - // This solver is a very low cost one anyway (there is actually nothing to solve). - static_cast(sketchgui->getObject())->solve(); - } + // adding external geometry does not require a solve() per se (the DoF is the same), + // however a solve is required to update the amount of solver geometry, because we only + // redraw a changed Sketch if the solver geometry amount is the same as the SkethObject + // geometry amount (as this avoids other issues). + // This solver is a very low cost one anyway (there is actually nothing to solve). + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); Gui::Selection().clearSelection(); /* this is ok not to call to purgeHandler @@ -6832,14 +6708,8 @@ static const char *cursor_carboncopy[]={ Gui::Command::commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else { - static_cast(sketchgui->getObject())->solve(); - } + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); Gui::Selection().clearSelection(); /* this is ok not to call to purgeHandler @@ -7100,22 +6970,14 @@ public: sugConstr2.clear(); } - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); } catch (const Base::Exception& e) { Base::Console().Error("Failed to add slot: %s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + + tryAutoRecompute(); } ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool continuousMode = hGrp->GetBool("ContinuousCreationMode",true); @@ -7326,9 +7188,6 @@ public: Gui::Command::commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - // add auto constraints at the center of the polygon if (sugConstr1.size() > 0) { createAutoConstraints(sugConstr1, getHighestCurveIndex(), Sketcher::mid); @@ -7341,20 +7200,14 @@ public: sugConstr2.clear(); } - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); } catch (const Base::Exception& e) { Base::Console().Error("Failed to add hexagon: %s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) // toggling does not modify the DoF of the solver, however it may affect features depending on the sketch - Gui::Command::updateActive(); + tryAutoRecompute(); } ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); diff --git a/src/Mod/Sketcher/Gui/CommandSketcherBSpline.cpp b/src/Mod/Sketcher/Gui/CommandSketcherBSpline.cpp index 7631cc9508..042583699c 100644 --- a/src/Mod/Sketcher/Gui/CommandSketcherBSpline.cpp +++ b/src/Mod/Sketcher/Gui/CommandSketcherBSpline.cpp @@ -410,14 +410,8 @@ void CmdSketcherConvertToNURB::activated(int iMsg) commitCommand(); } - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if (autoRecompute) - Gui::Command::updateActive(); - else - Obj->solve(); - + Obj->solve(); + tryAutoRecompute(); } bool CmdSketcherConvertToNURB::isActive(void) @@ -480,16 +474,10 @@ void CmdSketcherIncreaseDegree::activated(int iMsg) commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); + Obj->solve(); + tryAutoRecompute(); - if (autoRecompute) - Gui::Command::updateActive(); - else - Obj->solve(); - getSelection().clearSelection(); - } bool CmdSketcherIncreaseDegree::isActive(void) @@ -645,15 +633,10 @@ void CmdSketcherIncreaseKnotMultiplicity::activated(int iMsg) else { commitCommand(); } - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if (autoRecompute) - Gui::Command::updateActive(); - else - Obj->solve(); - + + Obj->solve(); + tryAutoRecompute(); + getSelection().clearSelection(); } @@ -798,17 +781,11 @@ void CmdSketcherDecreaseKnotMultiplicity::activated(int iMsg) else { commitCommand(); } - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if (autoRecompute) - Gui::Command::updateActive(); - else - Obj->solve(); - + + Obj->solve(); + tryAutoRecompute(); + getSelection().clearSelection(); - } bool CmdSketcherDecreaseKnotMultiplicity::isActive(void) diff --git a/src/Mod/Sketcher/Gui/CommandSketcherTools.cpp b/src/Mod/Sketcher/Gui/CommandSketcherTools.cpp index 5963ccf13a..119ea3ef5c 100644 --- a/src/Mod/Sketcher/Gui/CommandSketcherTools.cpp +++ b/src/Mod/Sketcher/Gui/CommandSketcherTools.cpp @@ -51,6 +51,7 @@ #include "ViewProviderSketch.h" #include "SketchRectangularArrayDialog.h" +#include "CommandConstraints.h" using namespace std; using namespace SketcherGui; @@ -182,11 +183,7 @@ void CmdSketcherCloseShape::activated(int iMsg) // finish the transaction and update commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -269,12 +266,8 @@ void CmdSketcherConnect::activated(int iMsg) // finish the transaction and update commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); + + tryAutoRecompute(); // clear the selection (convenience) getSelection().clearSelection(); @@ -790,26 +783,16 @@ void CmdSketcherRestoreInternalAlignmentGeometry::activated(int iMsg) Base::Console().Error("%s\n", e.what()); Gui::Command::abortCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(Obj)->solve(); + static_cast(Obj)->solve(); + tryAutoRecompute(); return; } Gui::Command::commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if (autoRecompute) - Gui::Command::updateActive(); - else - static_cast(Obj)->solve(); + static_cast(Obj)->solve(); + tryAutoRecompute(); } } } @@ -986,9 +969,6 @@ void CmdSketcherSymmetry::activated(int iMsg) Gui::Command::openCommand("Create Symmetric geometry"); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - try{ Gui::Command::doCommand( Gui::Command::Doc, "App.ActiveDocument.%s.addSymmetric(%s,%d,%d)", @@ -1002,10 +982,8 @@ void CmdSketcherSymmetry::activated(int iMsg) Gui::Command::abortCommand(); } - if(autoRecompute) - Gui::Command::updateActive(); - else - Obj->solve(); + Obj->solve(); + tryAutoRecompute(); } bool CmdSketcherSymmetry::isActive(void) @@ -1124,10 +1102,7 @@ static const char *cursor_createcopy[]={ int currentgeoid = static_cast(sketchgui->getObject())->getHighestCurveIndex(); Gui::Command::openCommand("Create copy of geometry"); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - + try{ Gui::Command::doCommand( Gui::Command::Doc, "App.ActiveDocument.%s.addCopy(%s,App.Vector(%f,%f,0),%s)", @@ -1148,10 +1123,8 @@ static const char *cursor_createcopy[]={ sugConstr1.clear(); } - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); EditCurve.clear(); sketchgui->drawEdit(EditCurve); @@ -1569,11 +1542,8 @@ static const char *cursor_createrectangulararray[]={ resetPositionText(); Gui::Command::openCommand("Create copy of geometry"); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - try{ + + try { Gui::Command::doCommand( Gui::Command::Doc, "App.ActiveDocument.%s.addRectangularArray(%s, App.Vector(%f,%f,0),%s,%d,%d,%s,%f)", sketchgui->getObject()->getNameInDocument(), @@ -1595,12 +1565,10 @@ static const char *cursor_createrectangulararray[]={ createAutoConstraints(sugConstr1, OriginGeoId+nElements, OriginPos); sugConstr1.clear(); } - - if(autoRecompute) - Gui::Command::updateActive(); - else - static_cast(sketchgui->getObject())->solve(); - + + static_cast(sketchgui->getObject())->solve(); + tryAutoRecompute(); + EditCurve.clear(); sketchgui->drawEdit(EditCurve); diff --git a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp index 04776d980d..7ca7beca10 100644 --- a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp +++ b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp @@ -42,6 +42,8 @@ #include "ViewProviderSketch.h" #include "ui_InsertDatum.h" #include "EditDatumDialog.h" +#include "CommandConstraints.h" + using namespace SketcherGui; @@ -164,17 +166,13 @@ void EditDatumDialog::exec(bool atCursor) } Gui::Command::commitCommand(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); if (sketch->noRecomputes && sketch->ExpressionEngine.depsAreTouched()) { sketch->ExpressionEngine.execute(); sketch->solve(); } - if(autoRecompute) - Gui::Command::updateActive(); + tryAutoRecompute(); } catch (const Base::Exception& e) { QMessageBox::critical(qApp->activeWindow(), QObject::tr("Dimensional constraint"), QString::fromUtf8(e.what())); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 9d1a1a8af3..72db88d747 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -111,6 +111,7 @@ #include "DrawSketchHandler.h" #include "TaskDlgEditSketch.h" #include "TaskSketcherValidation.h" +#include "CommandConstraints.h" // The first is used to point at a SoDatumLabel for some // constraints, and at a SoMaterial for others... @@ -769,13 +770,8 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe ); Gui::Command::commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - getSketchObject()->solve(); + getSketchObject()->solve(); + tryAutoRecompute(); } catch (const Base::Exception& e) { Gui::Command::abortCommand(); @@ -807,13 +803,9 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe ,edit->DragCurve, Sketcher::none, x-xInit, y-yInit, relative ? 1 : 0 ); Gui::Command::commitCommand(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - - if(autoRecompute) - Gui::Command::updateActive(); - else - getSketchObject()->solve(); + + getSketchObject()->solve(); + tryAutoRecompute(); } catch (const Base::Exception& e) { Gui::Command::abortCommand();