diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index f265937d06..2e1108e35e 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -543,6 +543,7 @@ ViewProviderSketch::ViewProviderSketch() , pObserver(std::make_unique(*this)) , sketchHandler(nullptr) , viewOrientationFactor(1) + , blockContextMenu(false) { PartGui::ViewProviderAttachExtension::initExtension(this); PartGui::ViewProviderGridExtension::initExtension(this); @@ -644,8 +645,6 @@ ViewProviderSketch::ViewProviderSketch() updateColorPropertiesVisibility(); pcSketchFacesToggle->addChild(pcSketchFaces); - - blockContextMenu = false; } ViewProviderSketch::~ViewProviderSketch() @@ -1166,7 +1165,7 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe else if (Button == 2) { if (pressed) { blockContextMenu = false; - + // Do things depending on the mode of the user interaction switch (Mode) { case STATUS_NONE: { @@ -1186,7 +1185,18 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe // Base::Console().log("start dragging, point:%d\n",this->DragPoint); setSketchMode(STATUS_SELECT_Constraint); } + break; } + case STATUS_SKETCH_UseRubberBand: + // Cancel rubberband + rubberband->setWorking(false); + blockContextMenu = true; + + // a redraw is required in order to clear the rubberband + draw(true, false); + const_cast(viewer)->redraw(); + setSketchMode(STATUS_NONE); + return true; default: break; } @@ -4375,7 +4385,7 @@ bool ViewProviderSketch::isInEditMode() const void ViewProviderSketch::generateContextMenu() { if (blockContextMenu) return; - + int selectedEdges = 0; int selectedLines = 0; int selectedConics = 0;