diff --git a/src/Mod/Sketcher/Gui/DrawSketchController.h b/src/Mod/Sketcher/Gui/DrawSketchController.h index 5d26a03069..714a6bda87 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchController.h +++ b/src/Mod/Sketcher/Gui/DrawSketchController.h @@ -565,6 +565,9 @@ protected: auto currentstate = handler->state(); // ensure that object at point is preselected, so that autoconstraints are generated handler->preselectAtPoint(lastControlEnforcedPosition); + // We have to redo an update to regenerate the correct autoconstraints after the + // preselectAtPoint. + handler->updateDataAndDrawToPosition(lastControlEnforcedPosition); doChangeDrawSketchHandlerMode(); diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandlerCircle.h b/src/Mod/Sketcher/Gui/DrawSketchHandlerCircle.h index 5f5fab870d..7bee4c9eda 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandlerCircle.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandlerCircle.h @@ -72,6 +72,7 @@ public: explicit DrawSketchHandlerCircle(ConstructionMethod constrMethod = ConstructionMethod::Center) : DrawSketchHandlerCircleBase(constrMethod) , radius(0.0) + , isDiameter(true) {} ~DrawSketchHandlerCircle() override = default; @@ -303,6 +304,7 @@ private: private: Base::Vector2d centerPoint, firstPoint, secondPoint; double radius; + bool isDiameter; }; template<> @@ -371,6 +373,16 @@ void DSHCircleController::configureToolWidget() 1, Gui::BitmapFactory().iconFromTheme("Sketcher_Create3PointCircle")); } + + + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath( + "User parameter:BaseApp/Preferences/Mod/Sketcher/dimensioning"); + bool dimensioningDiameter = hGrp->GetBool("DimensioningDiameter", true); + bool dimensioningRadius = hGrp->GetBool("DimensioningRadius", true); + + if (dimensioningRadius && !dimensioningDiameter) { + handler->isDiameter = false; + } } onViewParameters[OnViewParameter::First]->setLabelType(Gui::SoDatumLabel::DISTANCEX); @@ -419,7 +431,8 @@ void DSHCircleControllerBase::doEnforceControlParameters(Base::Vector2d& onSketc if (handler->constructionMethod() == DrawSketchHandlerCircle::ConstructionMethod::Center) { if (onViewParameters[OnViewParameter::Third]->isSet) { - double radius = onViewParameters[OnViewParameter::Third]->getValue(); + double radius = (handler->isDiameter ? 0.5 : 1) + * onViewParameters[OnViewParameter::Third]->getValue(); if (radius < Precision::Confusion()) { unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get()); return; @@ -622,20 +635,15 @@ void DSHCircleController::addConstraints() }; auto constraintradius = [&]() { - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath( - "User parameter:BaseApp/Preferences/Mod/Sketcher/dimensioning"); - bool dimensioningDiameter = hGrp->GetBool("DimensioningDiameter", true); - bool dimensioningRadius = hGrp->GetBool("DimensioningRadius", true); - - if (dimensioningRadius && !dimensioningDiameter) { + if (handler->isDiameter) { Gui::cmdAppObjectArgs(handler->sketchgui->getObject(), - "addConstraint(Sketcher.Constraint('Radius',%d,%f)) ", + "addConstraint(Sketcher.Constraint('Diameter',%d,%f)) ", firstCurve, - handler->radius); + handler->radius * 2); } else { Gui::cmdAppObjectArgs(handler->sketchgui->getObject(), - "addConstraint(Sketcher.Constraint('Diameter',%d,%f)) ", + "addConstraint(Sketcher.Constraint('Radius',%d,%f)) ", firstCurve, handler->radius); }