Merge pull request #16133 from Ondsel-Development/sk_circle_ovp_bug
Sketcher: Fix autoconstraint issue
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user