diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp
index 85f1cc9b8b75..1bc2540ef45a 100644
--- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp
+++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp
@@ -252,7 +252,23 @@ class DrawSketchHandlerLine: public DrawSketchHandler
EditCurve.clear();
sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ EditCurve.resize(2);
+ applyCursor();
+ /* It is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
}
return true;
}
@@ -456,9 +472,26 @@ class DrawSketchHandlerBox: public DrawSketchHandler
sugConstr2.clear();
}
- EditCurve.clear();
- sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ EditCurve.clear();
+ sketchgui->drawEdit(EditCurve);
+ EditCurve.resize(5);
+ applyCursor();
+ /* this is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
+
+
}
return true;
}
@@ -803,11 +836,35 @@ class DrawSketchHandlerLineSet: public DrawSketchHandler
// exit on clicking exactly at the same position (e.g. double click)
if (onSketchPos == EditCurve[0]) {
unsetCursor();
- EditCurve.clear();
resetPositionText();
+ EditCurve.clear();
sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
- return true; // 'this' instance is destroyed now!
+
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ SegmentMode=SEGMENT_MODE_Line;
+ TransitionMode=TRANSITION_MODE_Free;
+ suppressTransition=false;
+ firstCurve=-1;
+ previousCurve=-1;
+ firstPosId=Sketcher::none;
+ previousPosId=Sketcher::none;
+ EditCurve.resize(2);
+ applyCursor();
+ /* this is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ return true;
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ return true;
+ }
}
Mode = STATUS_Do;
@@ -911,10 +968,34 @@ class DrawSketchHandlerLineSet: public DrawSketchHandler
}
unsetCursor();
- EditCurve.clear();
+
resetPositionText();
- sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ EditCurve.clear();
+ sketchgui->drawEdit(EditCurve);
+
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ SegmentMode=SEGMENT_MODE_Line;
+ TransitionMode=TRANSITION_MODE_Free;
+ suppressTransition=false;
+ firstCurve=-1;
+ previousCurve=-1;
+ firstPosId=Sketcher::none;
+ previousPosId=Sketcher::none;
+ EditCurve.resize(2);
+ applyCursor();
+ /* this is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
}
else {
Gui::Command::commitCommand();
@@ -1230,9 +1311,24 @@ class DrawSketchHandlerArc : public DrawSketchHandler
sugConstr3.clear();
}
- EditCurve.clear();
- sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ EditCurve.clear();
+ sketchgui->drawEdit(EditCurve);
+ EditCurve.resize(2);
+ applyCursor();
+ /* this is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
}
return true;
}
@@ -1503,9 +1599,24 @@ class DrawSketchHandler3PointArc : public DrawSketchHandler
sugConstr3.clear();
}
- EditCurve.clear();
- sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ EditCurve.clear();
+ sketchgui->drawEdit(EditCurve);
+ EditCurve.resize(2);
+ applyCursor();
+ /* this is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
}
return true;
}
@@ -1760,9 +1871,24 @@ class DrawSketchHandlerCircle : public DrawSketchHandler
sugConstr2.clear();
}
- EditCurve.clear();
- sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ EditCurve.clear();
+ sketchgui->drawEdit(EditCurve);
+ EditCurve.resize(34);
+ applyCursor();
+ /* this is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
}
return true;
}
@@ -2054,6 +2180,18 @@ class DrawSketchHandlerEllipse : public DrawSketchHandler
{
if (mode == STATUS_Close) {
saveEllipse();
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ if (constrMethod == 0) {
+ method = CENTER_PERIAPSIS_B;
+ mode = STATUS_SEEK_CENTROID;
+ } else {
+ method = PERIAPSIS_APOAPSIS_B;
+ mode = STATUS_SEEK_PERIAPSIS;
+ }
+ }
}
return true;
}
@@ -2556,10 +2694,34 @@ class DrawSketchHandlerEllipse : public DrawSketchHandler
}
}
- // delete the temp construction curve from the sketch
- editCurve.clear();
- sketchgui->drawEdit(editCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler gets deleted in ViewProvider
+ // This code enables the continuous creation mode.
+ if (constrMethod == 0) {
+ method = CENTER_PERIAPSIS_B;
+ mode = STATUS_SEEK_CENTROID;
+ } else {
+ method = PERIAPSIS_APOAPSIS_B;
+ mode = STATUS_SEEK_PERIAPSIS;
+ }
+ editCurve.clear();
+ sketchgui->drawEdit(editCurve);
+
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ editCurve.resize(33);
+ applyCursor();
+ /* It is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
+
}
};
@@ -2929,9 +3091,24 @@ class DrawSketchHandlerArcOfEllipse : public DrawSketchHandler
sugConstr4.clear();
}
- EditCurve.clear();
- sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ EditCurve.clear();
+ sketchgui->drawEdit(EditCurve);
+ EditCurve.resize(34);
+ applyCursor();
+ /* this is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
}
return true;
}
@@ -3246,10 +3423,25 @@ class DrawSketchHandler3PointCircle : public DrawSketchHandler
createAutoConstraints(sugConstr3, getHighestCurveIndex(), Sketcher::none);
sugConstr3.clear();
}
-
- EditCurve.clear();
- sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ EditCurve.clear();
+ sketchgui->drawEdit(EditCurve);
+ EditCurve.resize(2);
+ applyCursor();
+ /* this is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
}
return true;
}
@@ -3453,7 +3645,20 @@ class DrawSketchHandlerPoint: public DrawSketchHandler
sugConstr.clear();
}
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ applyCursor();
+ /* It is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
}
return true;
}
@@ -4332,10 +4537,24 @@ class DrawSketchHandlerSlot: public DrawSketchHandler
Gui::Command::abortCommand();
Gui::Command::updateActive();
}
-
- EditCurve.clear();
- sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ EditCurve.clear();
+ sketchgui->drawEdit(EditCurve);
+ EditCurve.resize(36);
+ applyCursor();
+ /* this is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
}
return true;
}
@@ -4529,10 +4748,24 @@ class DrawSketchHandlerRegularPolygon: public DrawSketchHandler
Gui::Command::abortCommand();
Gui::Command::updateActive();
}
-
- EditCurve.clear();
- sketchgui->drawEdit(EditCurve);
- sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
+ bool continuousMode = hGrp->GetBool("ContinuousCreationMode", false);
+
+ if(continuousMode){
+ // This code enables the continuous creation mode.
+ Mode=STATUS_SEEK_First;
+ EditCurve.clear();
+ sketchgui->drawEdit(EditCurve);
+ EditCurve.resize(Corners+1);
+ applyCursor();
+ /* this is ok not to call to purgeHandler
+ * in continuous creation mode because the
+ * handler is destroyed by the quit() method on pressing the
+ * right button of the mouse */
+ }
+ else{
+ sketchgui->purgeHandler(); // no code after this line, Handler get deleted in ViewProvider
+ }
}
return true;
}
diff --git a/src/Mod/Sketcher/Gui/SketcherSettings.cpp b/src/Mod/Sketcher/Gui/SketcherSettings.cpp
index 3a3d7c3ca7b9..7d8176d55c4c 100644
--- a/src/Mod/Sketcher/Gui/SketcherSettings.cpp
+++ b/src/Mod/Sketcher/Gui/SketcherSettings.cpp
@@ -115,6 +115,7 @@ void SketcherSettings::saveSettings()
// Sketch editing
ui->EditSketcherFontSize->onSave();
ui->dialogOnDistanceConstraint->onSave();
+ ui->continueMode->onSave();
form->saveSettings();
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Part");
@@ -147,6 +148,7 @@ void SketcherSettings::loadSettings()
// Sketch editing
ui->EditSketcherFontSize->onRestore();
ui->dialogOnDistanceConstraint->onRestore();
+ ui->continueMode->onRestore();
form->loadSettings();
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Part");
diff --git a/src/Mod/Sketcher/Gui/SketcherSettings.ui b/src/Mod/Sketcher/Gui/SketcherSettings.ui
index 9bc8607c1bd9..c67d4a90906e 100644
--- a/src/Mod/Sketcher/Gui/SketcherSettings.ui
+++ b/src/Mod/Sketcher/Gui/SketcherSettings.ui
@@ -7,7 +7,7 @@
0
0
404
- 652
+ 680
@@ -565,6 +565,19 @@
+ -
+
+
+ Geometry Creation "Continue Mode"
+
+
+ ContinuousCreationMode
+
+
+ Mod/Sketcher
+
+
+