From 25a28b08519b5aa16ac0507cb585e4b5e382452c Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sat, 10 Jun 2017 23:51:40 +0200 Subject: [PATCH] Sketcher: redundant autoconstraint avoidance - Edit control checkbox fixes #3079 --- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 40 ++++++++++++-------- src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp | 9 +++++ src/Mod/Sketcher/Gui/TaskSketcherGeneral.h | 1 + src/Mod/Sketcher/Gui/TaskSketcherGeneral.ui | 25 +++++++++++- 4 files changed, 58 insertions(+), 17 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index 781a11e311..855feb28e7 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -340,7 +340,11 @@ public: Gui::Command::abortCommand(); } - removeRedundantHorizontalVertical(static_cast(sketchgui->getObject()),sugConstr1,sugConstr2); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + bool avoidredundant = hGrp->GetBool("AvoidRedundantAutoconstraints",true); + + if(avoidredundant) + removeRedundantHorizontalVertical(static_cast(sketchgui->getObject()),sugConstr1,sugConstr2); // add auto constraints for the line segment start if (sugConstr1.size() > 0) { @@ -354,8 +358,6 @@ public: sugConstr2.clear(); } - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool autoRecompute = hGrp->GetBool("AutoRecompute",false); if(autoRecompute) @@ -1133,14 +1135,19 @@ public: else static_cast(sketchgui->getObject())->solve(); } + + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + bool avoidredundant = hGrp->GetBool("AvoidRedundantAutoconstraints",true); if (Mode == STATUS_Close) { - if (SegmentMode == SEGMENT_MODE_Line) { // avoid redundant constraints. - if (sugConstr1.size() > 0) - removeRedundantHorizontalVertical(static_cast(sketchgui->getObject()),sugConstr1,sugConstr2); - else - removeRedundantHorizontalVertical(static_cast(sketchgui->getObject()),virtualsugConstr1,sugConstr2); + if(avoidredundant) { + if (SegmentMode == SEGMENT_MODE_Line) { // avoid redundant constraints. + if (sugConstr1.size() > 0) + removeRedundantHorizontalVertical(static_cast(sketchgui->getObject()),sugConstr1,sugConstr2); + else + removeRedundantHorizontalVertical(static_cast(sketchgui->getObject()),virtualsugConstr1,sugConstr2); + } } if (sugConstr2.size() > 0) { @@ -1195,13 +1202,16 @@ public: sugConstr1.clear(); } - if (SegmentMode == SEGMENT_MODE_Line) { // avoid redundant constraints. - if (sugConstr1.size() > 0) - removeRedundantHorizontalVertical(static_cast(sketchgui->getObject()),sugConstr1,sugConstr2); - else - removeRedundantHorizontalVertical(static_cast(sketchgui->getObject()),virtualsugConstr1,sugConstr2); + + if(avoidredundant) { + if (SegmentMode == SEGMENT_MODE_Line) { // avoid redundant constraints. + if (sugConstr1.size() > 0) + removeRedundantHorizontalVertical(static_cast(sketchgui->getObject()),sugConstr1,sugConstr2); + else + removeRedundantHorizontalVertical(static_cast(sketchgui->getObject()),virtualsugConstr1,sugConstr2); + } } - + virtualsugConstr1 = sugConstr2; // these are the initial constraints for the next iteration. if (sugConstr2.size() > 0) { @@ -1211,7 +1221,7 @@ public: ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); bool autoRecompute = hGrp->GetBool("AutoRecompute",false); - + if(autoRecompute) Gui::Command::updateActive(); else diff --git a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp index 229cd89f81..9981a30597 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp @@ -56,6 +56,8 @@ SketcherGeneralWidget::SketcherGeneralWidget(QWidget *parent) this, SIGNAL(emitToggleAutoconstraints(int))); connect(ui->renderingOrder->model(), SIGNAL(layoutChanged()), this, SLOT(renderOrderChanged())); + connect(ui->checkBoxRedundantAutoconstraints, SIGNAL(stateChanged(int)), + this, SLOT(on_checkBoxRedundantAutoconstraints_stateChanged(int))); } SketcherGeneralWidget::~SketcherGeneralWidget() @@ -108,6 +110,8 @@ void SketcherGeneralWidget::loadSettings() newItem->setData(Qt::UserRole, QVariant(lowid)); newItem->setText(lowid==1?tr("Normal Geometry"):lowid==2?tr("Construction Geometry"):tr("External Geometry")); ui->renderingOrder->insertItem(2,newItem); + + ui->checkBoxRedundantAutoconstraints->onRestore(); } void SketcherGeneralWidget::toggleGridView(bool on) @@ -155,6 +159,11 @@ void SketcherGeneralWidget::renderOrderChanged() emitRenderOrderChanged(); } +void SketcherGeneralWidget::on_checkBoxRedundantAutoconstraints_stateChanged(int state) +{ + ui->checkBoxRedundantAutoconstraints->onSave(); +} + // ---------------------------------------------------------------------------- TaskSketcherGeneral::TaskSketcherGeneral(ViewProviderSketch *sketchView) diff --git a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h index 9e316d6093..d3f755d628 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h +++ b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h @@ -62,6 +62,7 @@ public Q_SLOTS: void setGridSize(double val); void toggleGridSnap(int state); void renderOrderChanged(); + void on_checkBoxRedundantAutoconstraints_stateChanged(int); protected: void changeEvent(QEvent *e); diff --git a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.ui b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.ui index 3d149cf744..9a755a3b5f 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.ui +++ b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.ui @@ -6,8 +6,8 @@ 0 0 - 194 - 228 + 275 + 256 @@ -80,6 +80,22 @@ + + + + Avoid redundant auto constraints + + + true + + + AvoidRedundantAutoconstraints + + + Mod/Sketcher + + + @@ -108,6 +124,11 @@ QWidget
Gui/PrefWidgets.h
+ + Gui::PrefCheckBox + QCheckBox +
Gui/PrefWidgets.h
+