Sketcher: Line DSH: Harmonize width/length behavior with rectangle.

This commit is contained in:
PaddleStroke
2024-02-12 11:00:52 +01:00
committed by Chris Hennes
parent f88f48f64f
commit dfa1b94c83

View File

@@ -357,13 +357,37 @@ void DSHLineControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchP
case SelectMode::SeekSecond: {
if (handler->constructionMethod() == ConstructionMethod::OnePointWidthHeight) {
if (onViewParameters[OnViewParameter::Third]->isSet) {
onSketchPos.x = handler->startPoint.x
+ onViewParameters[OnViewParameter::Third]->getValue();
double length = onViewParameters[OnViewParameter::Third]->getValue();
if (fabs(length) < Precision::Confusion()) {
// Both cannot be 0
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double width = onViewParameters[OnViewParameter::Fourth]->getValue();
if (fabs(width) < Precision::Confusion()) {
unsetOnViewParameter(
onViewParameters[OnViewParameter::Third].get());
return;
}
}
}
int sign = (onSketchPos.x - handler->startPoint.x) >= 0 ? 1 : -1;
onSketchPos.x = handler->startPoint.x + sign * length;
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
onSketchPos.y = handler->startPoint.y
+ onViewParameters[OnViewParameter::Fourth]->getValue();
double width = onViewParameters[OnViewParameter::Fourth]->getValue();
if (fabs(width) < Precision::Confusion()) {
// Both cannot be 0
if (onViewParameters[OnViewParameter::Third]->isSet) {
double length = onViewParameters[OnViewParameter::Third]->getValue();
if (fabs(length) < Precision::Confusion()) {
unsetOnViewParameter(
onViewParameters[OnViewParameter::Fourth].get());
return;
}
}
}
int sign = (onSketchPos.y - handler->startPoint.y) >= 0 ? 1 : -1;
onSketchPos.y = handler->startPoint.y + sign * width;
}
}
else if (handler->constructionMethod() == ConstructionMethod::OnePointLengthAngle) {
@@ -440,11 +464,11 @@ void DSHLineController::adaptParameters(Base::Vector2d onSketchPos)
Base::Vector3d vec = end - start;
if (!onViewParameters[OnViewParameter::Third]->isSet) {
setOnViewParameterValue(OnViewParameter::Third, vec.x);
setOnViewParameterValue(OnViewParameter::Third, fabs(vec.x));
}
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, vec.y);
setOnViewParameterValue(OnViewParameter::Fourth, fabs(vec.y));
}
bool sameSign = vec.x * vec.y > 0.;
@@ -570,12 +594,13 @@ void DSHLineController::addConstraints()
firstCurve);
}
else {
bool reverse = (handler->endPoint.x - handler->startPoint.x) < 0;
Gui::cmdAppObjectArgs(obj,
"addConstraint(Sketcher.Constraint('DistanceX',%d,%d,%d,%d,%f)) ",
firstCurve,
1,
reverse ? 2 : 1,
firstCurve,
2,
reverse ? 1 : 2,
fabs(p3));
}
};
@@ -601,12 +626,13 @@ void DSHLineController::addConstraints()
firstCurve);
}
else {
bool reverse = (handler->endPoint.y - handler->startPoint.y) < 0;
Gui::cmdAppObjectArgs(obj,
"addConstraint(Sketcher.Constraint('DistanceY',%d,%d,%d,%d,%f)) ",
firstCurve,
1,
reverse ? 2 : 1,
firstCurve,
2,
reverse ? 1 : 2,
fabs(p4));
}
};