Sketcher: Line DSH: Harmonize width/length behavior with rectangle.
This commit is contained in:
committed by
Chris Hennes
parent
f88f48f64f
commit
dfa1b94c83
@@ -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));
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user