Sketcher: Refactor access to OVPs to not repeat array access everytime

As the title says. I think personally this increases readability just a
little bit and I thought it's low effort to refactor.

Instead of checking the OVPs through array everytime, since we access
them multiple times in different scenarios - just cache them on the
beginning of state and access the variable, instead of array.
This commit is contained in:
tetektoza
2025-06-07 23:36:25 +02:00
committed by Kacper Donat
parent 7388758ad9
commit a95d782ab0
12 changed files with 623 additions and 490 deletions

View File

@@ -532,15 +532,21 @@ void DSHArcControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchPo
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (handler->constructionMethod() == DrawSketchHandlerArc::ConstructionMethod::Center) {
Base::Vector2d dir = onSketchPos - handler->centerPoint;
if (dir.Length() < Precision::Confusion()) {
@@ -548,46 +554,46 @@ void DSHArcControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchPo
}
double radius = dir.Length();
if (onViewParameters[OnViewParameter::Third]->isSet) {
radius = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
radius = thirdParam->getValue();
if (radius < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
onSketchPos = handler->centerPoint + radius * dir.Normalize();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double angle =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
if (fourthParam->isSet) {
double angle = Base::toRadians(fourthParam->getValue());
onSketchPos.x = handler->centerPoint.x + cos(angle) * radius;
onSketchPos.y = handler->centerPoint.y + sin(angle) * radius;
}
}
else {
if (onViewParameters[OnViewParameter::Third]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
onSketchPos.x = thirdParam->getValue();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Fourth]->getValue();
if (fourthParam->isSet) {
onSketchPos.y = fourthParam->getValue();
}
if (onViewParameters[OnViewParameter::Third]->isSet
&& onViewParameters[OnViewParameter::Fourth]->isSet
if (thirdParam->isSet && fourthParam->isSet
&& (onSketchPos - handler->firstPoint).Length() < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(onViewParameters[OnViewParameter::Fourth].get());
unsetOnViewParameter(thirdParam.get());
unsetOnViewParameter(fourthParam.get());
}
}
} break;
case SelectMode::SeekThird: {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (handler->constructionMethod() == DrawSketchHandlerArc::ConstructionMethod::Center) {
if (onViewParameters[OnViewParameter::Fifth]->isSet) {
double arcAngle =
Base::toRadians(onViewParameters[OnViewParameter::Fifth]->getValue());
if (fifthParam->isSet) {
double arcAngle = Base::toRadians(fifthParam->getValue());
if (fmod(fabs(arcAngle), 2 * std::numbers::pi) < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Fifth].get());
unsetOnViewParameter(fifthParam.get());
return;
}
double angle = handler->startAngle + arcAngle;
@@ -596,12 +602,12 @@ void DSHArcControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchPo
}
}
else {
if (onViewParameters[OnViewParameter::Fifth]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::Fifth]->getValue();
if (fifthParam->isSet) {
onSketchPos.x = fifthParam->getValue();
}
if (onViewParameters[OnViewParameter::Sixth]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Sixth]->getValue();
if (sixthParam->isSet) {
onSketchPos.y = sixthParam->getValue();
}
}
} break;
@@ -615,88 +621,91 @@ void DSHArcController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
secondParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (handler->constructionMethod() == DrawSketchHandlerArc::ConstructionMethod::Center) {
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, handler->radius);
}
double range = Base::toDegrees(handler->startAngle);
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, range, Base::Unit::Angle);
}
Base::Vector3d start = toVector3d(handler->centerPoint);
Base::Vector3d end = toVector3d(onSketchPos);
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fourth]->setLabelRange(handler->startAngle);
thirdParam->setPoints(start, end);
fourthParam->setPoints(start, Base::Vector3d());
fourthParam->setLabelRange(handler->startAngle);
}
else {
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::Third]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Fourth]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::Third]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Fourth]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
thirdParam->setLabelAutoDistanceReverse(!sameSign);
fourthParam->setLabelAutoDistanceReverse(sameSign);
thirdParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
fourthParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
}
} break;
case SelectMode::SeekThird: {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (handler->constructionMethod() == DrawSketchHandlerArc::ConstructionMethod::Center) {
double range = Base::toDegrees(handler->arcAngle);
if (!onViewParameters[OnViewParameter::Fifth]->isSet) {
if (!fifthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fifth, range, Base::Unit::Angle);
}
Base::Vector3d start = toVector3d(handler->centerPoint);
onViewParameters[OnViewParameter::Fifth]->setPoints(start, Base::Vector3d());
fifthParam->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fifth]->setLabelStartAngle(handler->startAngle);
onViewParameters[OnViewParameter::Fifth]->setLabelRange(handler->arcAngle);
fifthParam->setLabelStartAngle(handler->startAngle);
fifthParam->setLabelRange(handler->arcAngle);
}
else {
if (!onViewParameters[OnViewParameter::Fifth]->isSet) {
if (!fifthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fifth, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Sixth]->isSet) {
if (!sixthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Sixth, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::Fifth]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Sixth]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::Fifth]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Sixth]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
fifthParam->setLabelAutoDistanceReverse(!sameSign);
sixthParam->setLabelAutoDistanceReverse(sameSign);
fifthParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
sixthParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
}
} break;
default:
@@ -709,30 +718,34 @@ void DSHArcController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet && secondParam->isSet) {
handler->setState(SelectMode::SeekSecond);
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::SeekThird);
}
} break;
case SelectMode::SeekThird: {
if (handler->constructionMethod() == DrawSketchHandlerArc::ConstructionMethod::Center) {
if (onViewParameters[OnViewParameter::Fifth]->hasFinishedEditing) {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
if (fifthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
}
else {
if (onViewParameters[OnViewParameter::Fifth]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Sixth]->hasFinishedEditing) {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (fifthParam->hasFinishedEditing || sixthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
}

View File

@@ -619,44 +619,50 @@ void DSHArcSlotControllerBase::doEnforceControlParameters(Base::Vector2d& onSket
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
auto dir = onSketchPos - handler->centerPoint;
if (dir.Length() < Precision::Confusion()) {
dir.x = 1.0; // if direction null, default to (1,0)
}
double radius = dir.Length();
if (onViewParameters[OnViewParameter::Third]->isSet) {
radius = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
radius = thirdParam->getValue();
if (radius < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
onSketchPos = handler->centerPoint + radius * dir.Normalize();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double angle =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
if (fourthParam->isSet) {
double angle = Base::toRadians(fourthParam->getValue());
onSketchPos.x = handler->centerPoint.x + cos(angle) * radius;
onSketchPos.y = handler->centerPoint.y + sin(angle) * radius;
}
} break;
case SelectMode::SeekThird: {
if (onViewParameters[OnViewParameter::Fifth]->isSet) {
double arcAngle =
Base::toRadians(onViewParameters[OnViewParameter::Fifth]->getValue());
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
if (fifthParam->isSet) {
double arcAngle = Base::toRadians(fifthParam->getValue());
if (fmod(fabs(arcAngle), 2 * std::numbers::pi) < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Fifth].get());
unsetOnViewParameter(fifthParam.get());
}
else {
double length = (onSketchPos - handler->centerPoint).Length();
@@ -667,15 +673,17 @@ void DSHArcSlotControllerBase::doEnforceControlParameters(Base::Vector2d& onSket
}
} break;
case SelectMode::SeekFourth: {
if (onViewParameters[OnViewParameter::Sixth]->isSet) {
double radius2 = onViewParameters[OnViewParameter::Sixth]->getValue();
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (sixthParam->isSet) {
double radius2 = sixthParam->getValue();
if ((fabs(radius2) < Precision::Confusion()
&& handler->constructionMethod()
== DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot)
|| (fabs(handler->radius - radius2) < Precision::Confusion()
&& handler->constructionMethod()
== DrawSketchHandlerArcSlot::ConstructionMethod::RectangleSlot)) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Sixth].get());
unsetOnViewParameter(sixthParam.get());
}
else {
onSketchPos =
@@ -693,59 +701,67 @@ void DSHArcSlotController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
secondParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
if (!onViewParameters[OnViewParameter::Third]->isSet) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, handler->radius);
}
double range = Base::toDegrees(handler->startAngle);
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, range, Base::Unit::Angle);
}
Base::Vector3d start = toVector3d(handler->centerPoint);
Base::Vector3d end = toVector3d(onSketchPos);
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fourth]->setLabelRange(handler->startAngle);
thirdParam->setPoints(start, end);
fourthParam->setPoints(start, Base::Vector3d());
fourthParam->setLabelRange(handler->startAngle);
} break;
case SelectMode::SeekThird: {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
double range = Base::toDegrees(handler->arcAngle);
if (!onViewParameters[OnViewParameter::Fifth]->isSet) {
if (!fifthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fifth, range, Base::Unit::Angle);
}
Base::Vector3d start = toVector3d(handler->centerPoint);
onViewParameters[OnViewParameter::Fifth]->setPoints(start, Base::Vector3d());
fifthParam->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fifth]->setLabelStartAngle(handler->startAngleBackup);
onViewParameters[OnViewParameter::Fifth]->setLabelRange(handler->arcAngle);
fifthParam->setLabelStartAngle(handler->startAngleBackup);
fifthParam->setLabelRange(handler->arcAngle);
} break;
case SelectMode::SeekFourth: {
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
double dist = handler->r;
if (handler->constructionMethod()
== DrawSketchHandlerArcSlot::ConstructionMethod::RectangleSlot) {
dist = (handler->r - handler->radius);
}
if (!onViewParameters[OnViewParameter::Sixth]->isSet) {
if (!sixthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Sixth, dist);
}
@@ -753,7 +769,7 @@ void DSHArcSlotController::adaptParameters(Base::Vector2d onSketchPos)
Base::Vector3d end =
start + (start - toVector3d(handler->centerPoint)).Normalize() * dist;
onViewParameters[OnViewParameter::Sixth]->setPoints(start, end);
sixthParam->setPoints(start, end);
} break;
default:
break;
@@ -765,28 +781,32 @@ void DSHArcSlotController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet && secondParam->isSet) {
handler->setState(SelectMode::SeekSecond);
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::SeekThird);
}
} break;
case SelectMode::SeekThird: {
if (onViewParameters[OnViewParameter::Fifth]->hasFinishedEditing) {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
if (fifthParam->hasFinishedEditing) {
handler->setState(SelectMode::SeekFourth);
}
} break;
case SelectMode::SeekFourth: {
if (onViewParameters[OnViewParameter::Sixth]->hasFinishedEditing) {
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (sixthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;

View File

@@ -958,19 +958,25 @@ void DSHBSplineControllerBase::doEnforceControlParameters(Base::Vector2d& onSket
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (handler->resetSeekSecond) {
handler->resetSeekSecond = false;
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(onViewParameters[OnViewParameter::Fourth].get());
unsetOnViewParameter(thirdParam.get());
unsetOnViewParameter(fourthParam.get());
setFocusToOnViewParameter(OnViewParameter::Third);
return;
}
@@ -983,10 +989,10 @@ void DSHBSplineControllerBase::doEnforceControlParameters(Base::Vector2d& onSket
}
double length = dir.Length();
if (onViewParameters[OnViewParameter::Third]->isSet) {
length = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
length = thirdParam->getValue();
if (length < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
@@ -1000,18 +1006,16 @@ void DSHBSplineControllerBase::doEnforceControlParameters(Base::Vector2d& onSket
}
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double angle =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
if (fourthParam->isSet) {
double angle = Base::toRadians(fourthParam->getValue());
onSketchPos.x = prevPoint.x + cos(angle) * length;
onSketchPos.y = prevPoint.y + sin(angle) * length;
}
if (onViewParameters[OnViewParameter::Third]->isSet
&& onViewParameters[OnViewParameter::Fourth]->isSet
if (thirdParam->isSet && fourthParam->isSet
&& (onSketchPos - prevPoint).Length() < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(onViewParameters[OnViewParameter::Fourth].get());
unsetOnViewParameter(thirdParam.get());
unsetOnViewParameter(fourthParam.get());
}
} break;
default:
@@ -1024,23 +1028,27 @@ void DSHBSplineController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
secondParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
Base::Vector2d prevPoint;
if (!handler->points.empty()) {
prevPoint = handler->getLastPoint();
@@ -1050,20 +1058,20 @@ void DSHBSplineController::adaptParameters(Base::Vector2d onSketchPos)
Base::Vector3d end = toVector3d(onSketchPos);
Base::Vector3d vec = end - start;
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, vec.Length());
}
double range = (onSketchPos - prevPoint).Angle();
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth,
Base::toDegrees(range),
Base::Unit::Angle);
}
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fourth]->setLabelRange(range);
thirdParam->setPoints(start, end);
fourthParam->setPoints(start, Base::Vector3d());
fourthParam->setLabelRange(range);
} break;
default:
break;
@@ -1075,20 +1083,24 @@ void DSHBSplineController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
double x = onViewParameters[OnViewParameter::First]->getValue();
double y = onViewParameters[OnViewParameter::Second]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet && secondParam->isSet) {
double x = firstParam->getValue();
double y = secondParam->getValue();
handler->onButtonPressed(Base::Vector2d(x, y));
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
handler->canGoToNextMode(); // its not going to next mode
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(onViewParameters[OnViewParameter::Fourth].get());
unsetOnViewParameter(thirdParam.get());
unsetOnViewParameter(fourthParam.get());
}
} break;
default:

View File

@@ -438,22 +438,27 @@ void DSHCircleControllerBase::doEnforceControlParameters(Base::Vector2d& onSketc
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (handler->constructionMethod()
== DrawSketchHandlerCircle::ConstructionMethod::Center) {
if (onViewParameters[OnViewParameter::Third]->isSet) {
double radius = (handler->isDiameter ? 0.5 : 1)
* onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
double radius = (handler->isDiameter ? 0.5 : 1) * thirdParam->getValue();
if (radius < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
@@ -467,35 +472,36 @@ void DSHCircleControllerBase::doEnforceControlParameters(Base::Vector2d& onSketc
}
}
else {
if (onViewParameters[OnViewParameter::Third]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
onSketchPos.x = thirdParam->getValue();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Fourth]->getValue();
if (fourthParam->isSet) {
onSketchPos.y = fourthParam->getValue();
}
if (onViewParameters[OnViewParameter::Third]->isSet
&& onViewParameters[OnViewParameter::Fourth]->isSet
if (thirdParam->isSet && fourthParam->isSet
&& (onSketchPos - handler->firstPoint).Length() < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(onViewParameters[OnViewParameter::Fourth].get());
unsetOnViewParameter(thirdParam.get());
unsetOnViewParameter(fourthParam.get());
}
}
} break;
case SelectMode::SeekThird: { // 3 rims only
if (onViewParameters[OnViewParameter::Fifth]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::Fifth]->getValue();
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (fifthParam->isSet) {
onSketchPos.x = fifthParam->getValue();
}
if (onViewParameters[OnViewParameter::Sixth]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Sixth]->getValue();
if (sixthParam->isSet) {
onSketchPos.y = sixthParam->getValue();
}
if (onViewParameters[OnViewParameter::Fifth]->isSet
&& onViewParameters[OnViewParameter::Sixth]->isSet
if (fifthParam->isSet && sixthParam->isSet
&& areCollinear(handler->firstPoint, handler->secondPoint, onSketchPos)) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Fifth].get());
unsetOnViewParameter(onViewParameters[OnViewParameter::Sixth].get());
unsetOnViewParameter(fifthParam.get());
unsetOnViewParameter(sixthParam.get());
}
} break;
default:
@@ -508,23 +514,27 @@ void DSHCircleController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
secondParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (handler->constructionMethod()
== DrawSketchHandlerCircle::ConstructionMethod::Center) {
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath(
@@ -533,7 +543,7 @@ void DSHCircleController::adaptParameters(Base::Vector2d onSketchPos)
bool dimRadius = hGrp->GetBool("DimensioningRadius", true);
bool useRadius = dimRadius && !dimDiameter;
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
double val = handler->radius * (useRadius ? 1 : 2);
setOnViewParameterValue(OnViewParameter::Third, val);
}
@@ -544,42 +554,41 @@ void DSHCircleController::adaptParameters(Base::Vector2d onSketchPos)
start = toVector3d(handler->centerPoint - (onSketchPos - handler->centerPoint));
}
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
thirdParam->setPoints(start, end);
}
else {
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::Third]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Fourth]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::Third]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Fourth]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
thirdParam->setLabelAutoDistanceReverse(!sameSign);
fourthParam->setLabelAutoDistanceReverse(sameSign);
thirdParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
fourthParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
}
} break;
case SelectMode::SeekThird: { // 3 rims only
if (!onViewParameters[OnViewParameter::Fifth]->isSet) {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (!fifthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fifth, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Sixth]->isSet) {
if (!sixthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Sixth, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::Fifth]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Sixth]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::Fifth]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Sixth]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
fifthParam->setLabelAutoDistanceReverse(!sameSign);
sixthParam->setLabelAutoDistanceReverse(sameSign);
fifthParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
sixthParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
default:
break;
@@ -591,21 +600,24 @@ void DSHCircleController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet && secondParam->isSet) {
handler->setState(SelectMode::SeekSecond);
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing
&& handler->constructionMethod()
== DrawSketchHandlerCircle::ConstructionMethod::Center) {
handler->setState(SelectMode::End);
}
else if (onViewParameters.size() > 3 && onViewParameters[OnViewParameter::Third]->isSet
&& onViewParameters[OnViewParameter::Fourth]->isSet
else if (onViewParameters.size() > 3 && thirdParam->isSet && fourthParam->isSet
&& handler->constructionMethod()
== DrawSketchHandlerCircle::ConstructionMethod::ThreeRim) {
@@ -613,9 +625,10 @@ void DSHCircleController::doChangeDrawSketchHandlerMode()
}
} break;
case SelectMode::SeekThird: {
if (onViewParameters[OnViewParameter::Fifth]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Sixth]->hasFinishedEditing) {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (fifthParam->hasFinishedEditing || sixthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;

View File

@@ -499,15 +499,21 @@ void DSHEllipseControllerBase::doEnforceControlParameters(Base::Vector2d& onSket
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (handler->constructionMethod()
== DrawSketchHandlerEllipse::ConstructionMethod::Center) {
Base::Vector2d dir = onSketchPos - handler->centerPoint;
@@ -516,45 +522,46 @@ void DSHEllipseControllerBase::doEnforceControlParameters(Base::Vector2d& onSket
}
double length = dir.Length();
if (onViewParameters[OnViewParameter::Third]->isSet) {
length = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
length = thirdParam->getValue();
if (length < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
onSketchPos = handler->centerPoint + length * dir.Normalize();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double angle =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
if (fourthParam->isSet) {
double angle = Base::toRadians(fourthParam->getValue());
onSketchPos.x = handler->centerPoint.x + cos(angle) * length;
onSketchPos.y = handler->centerPoint.y + sin(angle) * length;
}
}
else {
if (onViewParameters[OnViewParameter::Third]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
onSketchPos.x = thirdParam->getValue();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Fourth]->getValue();
if (fourthParam->isSet) {
onSketchPos.y = fourthParam->getValue();
}
if (onViewParameters[OnViewParameter::Third]->isSet
&& onViewParameters[OnViewParameter::Fourth]->isSet
if (thirdParam->isSet && fourthParam->isSet
&& (onSketchPos - handler->apoapsis).Length() < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(onViewParameters[OnViewParameter::Fourth].get());
unsetOnViewParameter(thirdParam.get());
unsetOnViewParameter(fourthParam.get());
}
}
} break;
case SelectMode::SeekThird: {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (handler->constructionMethod()
== DrawSketchHandlerEllipse::ConstructionMethod::Center) {
if (onViewParameters[OnViewParameter::Fifth]->isSet) {
auto minorradius = onViewParameters[OnViewParameter::Fifth]->getValue();
if (fifthParam->isSet) {
auto minorradius = fifthParam->getValue();
onSketchPos = handler->centerPoint
+ (handler->periapsis - handler->centerPoint)
.Perpendicular(true)
@@ -563,19 +570,18 @@ void DSHEllipseControllerBase::doEnforceControlParameters(Base::Vector2d& onSket
}
}
else {
if (onViewParameters[OnViewParameter::Fifth]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::Fifth]->getValue();
if (fifthParam->isSet) {
onSketchPos.x = fifthParam->getValue();
}
if (onViewParameters[OnViewParameter::Sixth]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Sixth]->getValue();
if (sixthParam->isSet) {
onSketchPos.y = sixthParam->getValue();
}
if (onViewParameters[OnViewParameter::Fifth]->isSet
&& onViewParameters[OnViewParameter::Sixth]->isSet
if (fifthParam->isSet && sixthParam->isSet
&& areCollinear(handler->apoapsis, handler->periapsis, onSketchPos)) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Fifth].get());
unsetOnViewParameter(onViewParameters[OnViewParameter::Sixth].get());
unsetOnViewParameter(fifthParam.get());
unsetOnViewParameter(sixthParam.get());
}
}
} break;
@@ -589,32 +595,36 @@ void DSHEllipseController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
secondParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (handler->constructionMethod()
== DrawSketchHandlerEllipse::ConstructionMethod::Center) {
auto vec = onSketchPos - handler->centerPoint;
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, vec.Length());
}
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
double angle = vec.Length() > 0 ? Base::toDegrees(vec.Angle()) : 0;
setOnViewParameterValue(OnViewParameter::Fourth, angle, Base::Unit::Angle);
}
@@ -622,59 +632,56 @@ void DSHEllipseController::adaptParameters(Base::Vector2d onSketchPos)
Base::Vector3d start = toVector3d(handler->centerPoint);
Base::Vector3d end = toVector3d(onSketchPos);
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
thirdParam->setPoints(start, end);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fourth]->setLabelRange(
(onSketchPos - handler->centerPoint).Angle());
fourthParam->setPoints(start, Base::Vector3d());
fourthParam->setLabelRange((onSketchPos - handler->centerPoint).Angle());
}
else {
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::Third]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Fourth]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::Third]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Fourth]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
thirdParam->setLabelAutoDistanceReverse(!sameSign);
fourthParam->setLabelAutoDistanceReverse(sameSign);
thirdParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
fourthParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
}
} break;
case SelectMode::SeekThird: {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (handler->constructionMethod()
== DrawSketchHandlerEllipse::ConstructionMethod::Center) {
if (!onViewParameters[OnViewParameter::Fifth]->isSet) {
if (!fifthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fifth, handler->secondAxis.Length());
}
Base::Vector3d start = toVector3d(handler->centerPoint);
Base::Vector3d end = toVector3d(handler->centerPoint + handler->secondAxis);
onViewParameters[OnViewParameter::Fifth]->setPoints(start, end);
fifthParam->setPoints(start, end);
}
else {
if (!onViewParameters[OnViewParameter::Fifth]->isSet) {
if (!fifthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fifth, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Sixth]->isSet) {
if (!sixthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Sixth, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::Fifth]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Sixth]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::Fifth]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Sixth]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
fifthParam->setLabelAutoDistanceReverse(!sameSign);
sixthParam->setLabelAutoDistanceReverse(sameSign);
fifthParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
sixthParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
}
} break;
default:
@@ -687,31 +694,33 @@ void DSHEllipseController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet && secondParam->isSet) {
handler->setState(SelectMode::SeekSecond);
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::SeekThird);
}
} break;
case SelectMode::SeekThird: {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (handler->constructionMethod()
== DrawSketchHandlerEllipse::ConstructionMethod::Center) {
if (onViewParameters[OnViewParameter::Fifth]->hasFinishedEditing) {
if (fifthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
}
else {
if (onViewParameters[OnViewParameter::Fifth]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Sixth]->hasFinishedEditing) {
if (fifthParam->hasFinishedEditing || sixthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
}

View File

@@ -366,25 +366,30 @@ void DSHLineControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchP
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (handler->constructionMethod() == ConstructionMethod::OnePointWidthHeight) {
if (onViewParameters[OnViewParameter::Third]->isSet) {
double length = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
double length = thirdParam->getValue();
if (fabs(length) < Precision::Confusion()) {
// Both cannot be 0
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double width = onViewParameters[OnViewParameter::Fourth]->getValue();
if (fourthParam->isSet) {
double width = fourthParam->getValue();
if (fabs(width) < Precision::Confusion()) {
unsetOnViewParameter(
onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
}
@@ -393,15 +398,14 @@ void DSHLineControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchP
onSketchPos.x = handler->startPoint.x + sign * length;
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double width = onViewParameters[OnViewParameter::Fourth]->getValue();
if (fourthParam->isSet) {
double width = fourthParam->getValue();
if (fabs(width) < Precision::Confusion()) {
// Both cannot be 0
if (onViewParameters[OnViewParameter::Third]->isSet) {
double length = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
double length = thirdParam->getValue();
if (fabs(length) < Precision::Confusion()) {
unsetOnViewParameter(
onViewParameters[OnViewParameter::Fourth].get());
unsetOnViewParameter(fourthParam.get());
return;
}
}
@@ -418,38 +422,36 @@ void DSHLineControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchP
}
double length = dir.Length();
if (onViewParameters[OnViewParameter::Third]->isSet) {
length = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
length = thirdParam->getValue();
if (length < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
onSketchPos = handler->startPoint + length * dir.Normalize();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double angle =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
if (fourthParam->isSet) {
double angle = Base::toRadians(fourthParam->getValue());
Base::Vector2d ovpDir(cos(angle), sin(angle));
onSketchPos.ProjectToLine(onSketchPos - handler->startPoint, ovpDir);
onSketchPos += handler->startPoint;
}
}
else {
if (onViewParameters[OnViewParameter::Third]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
onSketchPos.x = thirdParam->getValue();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Fourth]->getValue();
if (fourthParam->isSet) {
onSketchPos.y = fourthParam->getValue();
}
}
if (onViewParameters[OnViewParameter::Third]->isSet
&& onViewParameters[OnViewParameter::Fourth]->isSet
if (thirdParam->isSet && fourthParam->isSet
&& (onSketchPos - handler->startPoint).Length() < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(onViewParameters[OnViewParameter::Fourth].get());
unsetOnViewParameter(thirdParam.get());
unsetOnViewParameter(fourthParam.get());
}
} break;
default:
@@ -462,62 +464,65 @@ void DSHLineController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
secondParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (handler->constructionMethod() == ConstructionMethod::OnePointWidthHeight) {
Base::Vector3d start = toVector3d(handler->startPoint);
Base::Vector3d end = toVector3d(handler->endPoint);
Base::Vector3d vec = end - start;
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, fabs(vec.x));
}
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, fabs(vec.y));
}
bool sameSign = vec.x * vec.y > 0.;
onViewParameters[OnViewParameter::Third]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Fourth]->setLabelAutoDistanceReverse(sameSign);
thirdParam->setLabelAutoDistanceReverse(!sameSign);
fourthParam->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, end);
thirdParam->setPoints(start, end);
fourthParam->setPoints(start, end);
}
else if (handler->constructionMethod() == ConstructionMethod::OnePointLengthAngle) {
Base::Vector3d start = toVector3d(handler->startPoint);
Base::Vector3d end = toVector3d(handler->endPoint);
Base::Vector3d vec = end - start;
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, vec.Length());
}
double range = (handler->endPoint - handler->startPoint).Angle();
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth,
Base::toDegrees(range),
Base::Unit::Angle);
}
else if (vec.Length() > Precision::Confusion()) {
double ovpRange =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
double ovpRange = Base::toRadians(fourthParam->getValue());
if (fabs(range - ovpRange) > Precision::Confusion()) {
setOnViewParameterValue(OnViewParameter::Fourth,
Base::toDegrees(range),
@@ -525,26 +530,24 @@ void DSHLineController::adaptParameters(Base::Vector2d onSketchPos)
}
}
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fourth]->setLabelRange(range);
thirdParam->setPoints(start, end);
fourthParam->setPoints(start, Base::Vector3d());
fourthParam->setLabelRange(range);
}
else {
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::Third]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Fourth]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::Third]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Fourth]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
thirdParam->setLabelAutoDistanceReverse(!sameSign);
fourthParam->setLabelAutoDistanceReverse(sameSign);
thirdParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
fourthParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
}
} break;
default:
@@ -557,16 +560,18 @@ void DSHLineController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet && secondParam->isSet) {
handler->setState(SelectMode::SeekSecond);
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;

View File

@@ -1180,11 +1180,13 @@ void DSHOffsetController::adaptParameters(Base::Vector2d onSketchPos)
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, handler->offsetLength);
}
onViewParameters[OnViewParameter::First]->setPoints(
firstParam->setPoints(
Base::Vector3d(handler->endpoint.x, handler->endpoint.y, 0.),
Base::Vector3d(handler->pointOnSourceWire.x, handler->pointOnSourceWire.y, 0.));
} break;
@@ -1198,7 +1200,9 @@ void DSHOffsetController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->hasFinishedEditing) {
auto& firstParam = onViewParameters[OnViewParameter::First];
if (firstParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;

View File

@@ -181,12 +181,15 @@ void DSHPointController::doEnforceControlParameters(Base::Vector2d& onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
default:
@@ -199,23 +202,24 @@ void DSHPointController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(
Base::Vector3d(0., 0., 0.),
Base::Vector3d(onSketchPos.x, onSketchPos.y, 0.));
onViewParameters[OnViewParameter::Second]->setPoints(
Base::Vector3d(0., 0., 0.),
Base::Vector3d(onSketchPos.x, onSketchPos.y, 0.));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(0., 0., 0.),
Base::Vector3d(onSketchPos.x, onSketchPos.y, 0.));
secondParam->setPoints(Base::Vector3d(0., 0., 0.),
Base::Vector3d(onSketchPos.x, onSketchPos.y, 0.));
} break;
default:
break;
@@ -227,9 +231,10 @@ void DSHPointController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Second]->hasFinishedEditing) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->hasFinishedEditing || secondParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
// handler->finish(); // Called by the change of mode
}

View File

@@ -354,34 +354,39 @@ void DSHPolygonControllerBase::doEnforceControlParameters(Base::Vector2d& onSket
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
Base::Vector2d dir = onSketchPos - handler->centerPoint;
if (dir.Length() < Precision::Confusion()) {
dir.x = 1.0; // if direction null, default to (1,0)
}
double length = dir.Length();
if (onViewParameters[OnViewParameter::Third]->isSet) {
length = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
length = thirdParam->getValue();
if (length < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
onSketchPos = handler->centerPoint + length * dir.Normalize();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double angle =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
if (fourthParam->isSet) {
double angle = Base::toRadians(fourthParam->getValue());
onSketchPos.x = handler->centerPoint.x + cos(angle) * length;
onSketchPos.y = handler->centerPoint.y + sin(angle) * length;
}
@@ -396,41 +401,45 @@ void DSHPolygonController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
secondParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
Base::Vector3d start = toVector3d(handler->centerPoint);
Base::Vector3d end = toVector3d(handler->firstCorner);
Base::Vector3d vec = end - start;
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, vec.Length());
}
double range = (handler->firstCorner - handler->centerPoint).Angle();
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth,
Base::toDegrees(range),
Base::Unit::Angle);
}
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fourth]->setLabelRange(range);
thirdParam->setPoints(start, end);
fourthParam->setPoints(start, Base::Vector3d());
fourthParam->setLabelRange(range);
} break;
default:
@@ -443,16 +452,18 @@ void DSHPolygonController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet && secondParam->isSet) {
handler->setState(SelectMode::SeekSecond);
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;

View File

@@ -555,21 +555,24 @@ void DSHRotateControllerBase::doEnforceControlParameters(Base::Vector2d& onSketc
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->isSet) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
double arcAngle =
Base::toRadians(onViewParameters[OnViewParameter::Third]->getValue());
if (thirdParam->isSet) {
double arcAngle = Base::toRadians(thirdParam->getValue());
if (fmod(fabs(arcAngle), 2 * std::numbers::pi) < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
onSketchPos.x = handler->centerPoint.x + 1;
@@ -577,12 +580,12 @@ void DSHRotateControllerBase::doEnforceControlParameters(Base::Vector2d& onSketc
}
} break;
case SelectMode::SeekThird: {
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
double arcAngle =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
if (fourthParam->isSet) {
double arcAngle = Base::toRadians(fourthParam->getValue());
if (fmod(fabs(arcAngle), 2 * std::numbers::pi) < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Fourth].get());
unsetOnViewParameter(fourthParam.get());
return;
}
@@ -600,45 +603,50 @@ void DSHRotateController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
secondParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
double range = Base::toDegrees(handler->startAngle);
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, range, Base::Unit::Angle);
}
Base::Vector3d start = toVector3d(handler->centerPoint);
onViewParameters[OnViewParameter::Third]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Third]->setLabelRange(handler->startAngle);
thirdParam->setPoints(start, Base::Vector3d());
thirdParam->setLabelRange(handler->startAngle);
} break;
case SelectMode::SeekThird: {
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
double range = Base::toDegrees(handler->totalAngle);
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, range, Base::Unit::Angle);
}
Base::Vector3d start = toVector3d(handler->centerPoint);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());
fourthParam->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fourth]->setLabelStartAngle(handler->startAngle);
onViewParameters[OnViewParameter::Fourth]->setLabelRange(handler->totalAngle);
fourthParam->setLabelStartAngle(handler->startAngle);
fourthParam->setLabelRange(handler->totalAngle);
} break;
default:
break;
@@ -650,23 +658,25 @@ void DSHRotateController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet && secondParam->isSet) {
handler->setState(SelectMode::SeekSecond);
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing) {
handler->totalAngle =
Base::toRadians(onViewParameters[OnViewParameter::Third]->getValue());
auto& thirdParam = onViewParameters[OnViewParameter::Third];
if (thirdParam->hasFinishedEditing) {
handler->totalAngle = Base::toRadians(thirdParam->getValue());
handler->setState(SelectMode::End);
}
} break;
case SelectMode::SeekThird: {
if (onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;

View File

@@ -403,45 +403,52 @@ void DSHSlotControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchP
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
Base::Vector2d dir = onSketchPos - handler->startPoint;
if (dir.Length() < Precision::Confusion()) {
dir.x = 1.0; // if direction null, default to (1,0)
}
double length = dir.Length();
if (onViewParameters[OnViewParameter::Third]->isSet) {
length = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
length = thirdParam->getValue();
if (length < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
onSketchPos = handler->startPoint + length * dir.Normalize();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double angle =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
if (fourthParam->isSet) {
double angle = Base::toRadians(fourthParam->getValue());
Base::Vector2d ovpDir(cos(angle), sin(angle));
onSketchPos.ProjectToLine(onSketchPos - handler->startPoint, ovpDir);
onSketchPos += handler->startPoint;
}
} break;
case SelectMode::SeekThird: {
if (onViewParameters[OnViewParameter::Fifth]->isSet) {
double radius = onViewParameters[OnViewParameter::Fifth]->getValue();
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
if (fifthParam->isSet) {
double radius = fifthParam->getValue();
if (radius < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Fifth].get());
unsetOnViewParameter(fifthParam.get());
return;
}
@@ -459,40 +466,43 @@ void DSHSlotController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
secondParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
Base::Vector3d start = toVector3d(handler->startPoint);
Base::Vector3d end = toVector3d(handler->secondPoint);
Base::Vector3d vec = end - start;
if (!onViewParameters[OnViewParameter::Third]->isSet) {
if (!thirdParam->isSet) {
setOnViewParameterValue(OnViewParameter::Third, vec.Length());
}
double range = (handler->secondPoint - handler->startPoint).Angle();
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth,
Base::toDegrees(range),
Base::Unit::Angle);
}
else if (vec.Length() > Precision::Confusion()) {
double ovpRange =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
double ovpRange = Base::toRadians(fourthParam->getValue());
if (fabs(range - ovpRange) > Precision::Confusion()) {
setOnViewParameterValue(OnViewParameter::Fourth,
@@ -501,12 +511,14 @@ void DSHSlotController::adaptParameters(Base::Vector2d onSketchPos)
}
}
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fourth]->setLabelRange(range);
thirdParam->setPoints(start, end);
fourthParam->setPoints(start, Base::Vector3d());
fourthParam->setLabelRange(range);
} break;
case SelectMode::SeekThird: {
if (!onViewParameters[OnViewParameter::Fifth]->isSet) {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
if (!fifthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fifth, handler->radius);
}
@@ -514,8 +526,7 @@ void DSHSlotController::adaptParameters(Base::Vector2d onSketchPos)
labelSecondPoint.x = handler->secondPoint.x + cos(handler->angle) * handler->radius;
labelSecondPoint.y = handler->secondPoint.y + sin(handler->angle) * handler->radius;
onViewParameters[OnViewParameter::Fifth]->setPoints(toVector3d(handler->secondPoint),
labelSecondPoint);
fifthParam->setPoints(toVector3d(handler->secondPoint), labelSecondPoint);
} break;
default:
@@ -528,22 +539,25 @@ void DSHSlotController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet && secondParam->isSet) {
handler->setState(SelectMode::SeekSecond);
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
handler->setState(SelectMode::SeekThird);
}
} break;
case SelectMode::SeekThird: {
if (onViewParameters[OnViewParameter::Fifth]->hasFinishedEditing) {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
if (fifthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;

View File

@@ -560,58 +560,65 @@ void DSHTranslateControllerBase::doEnforceControlParameters(Base::Vector2d& onSk
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet) {
onSketchPos.x = firstParam->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
if (secondParam->isSet) {
onSketchPos.y = secondParam->getValue();
}
} break;
case SelectMode::SeekSecond: {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
Base::Vector2d dir = onSketchPos - handler->referencePoint;
if (dir.Length() < Precision::Confusion()) {
dir.x = 1.0; // if direction null, default to (1,0)
}
double length = dir.Length();
if (onViewParameters[OnViewParameter::Third]->isSet) {
length = onViewParameters[OnViewParameter::Third]->getValue();
if (thirdParam->isSet) {
length = thirdParam->getValue();
if (length < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
unsetOnViewParameter(thirdParam.get());
return;
}
onSketchPos = handler->referencePoint + length * dir.Normalize();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double angle =
Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue());
if (fourthParam->isSet) {
double angle = Base::toRadians(fourthParam->getValue());
onSketchPos.x = handler->referencePoint.x + cos(angle) * length;
onSketchPos.y = handler->referencePoint.y + sin(angle) * length;
}
} break;
case SelectMode::SeekThird: {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
Base::Vector2d dir = onSketchPos - handler->referencePoint;
if (dir.Length() < Precision::Confusion()) {
dir.x = 1.0; // if direction null, default to (1,0)
}
double length = dir.Length();
if (onViewParameters[OnViewParameter::Fifth]->isSet) {
length = onViewParameters[OnViewParameter::Fifth]->getValue();
if (fifthParam->isSet) {
length = fifthParam->getValue();
if (length < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Fifth].get());
unsetOnViewParameter(fifthParam.get());
return;
}
onSketchPos = handler->referencePoint + length * dir.Normalize();
}
if (onViewParameters[OnViewParameter::Sixth]->isSet) {
double angle =
Base::toRadians(onViewParameters[OnViewParameter::Sixth]->getValue());
if (sixthParam->isSet) {
double angle = Base::toRadians(sixthParam->getValue());
onSketchPos.x = handler->referencePoint.x + cos(angle) * length;
onSketchPos.y = handler->referencePoint.y + sin(angle) * length;
}
@@ -626,24 +633,28 @@ void DSHTranslateController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (!firstParam->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
if (!secondParam->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
firstParam->setLabelAutoDistanceReverse(!sameSign);
secondParam->setLabelAutoDistanceReverse(sameSign);
firstParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
secondParam->setPoints(Base::Vector3d(), toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
if (!onViewParameters[OnViewParameter::Third]->isSet) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (!thirdParam->isSet) {
double length = (onSketchPos - handler->referencePoint).Length();
setOnViewParameterValue(OnViewParameter::Third, length);
}
@@ -653,19 +664,22 @@ void DSHTranslateController::adaptParameters(Base::Vector2d onSketchPos)
double angle = vec2d.Angle();
double range = angle * 180 / std::numbers::pi;
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
if (!fourthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, range, Base::Unit::Angle);
}
Base::Vector3d start = toVector3d(handler->referencePoint);
Base::Vector3d end = toVector3d(onSketchPos);
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fourth]->setLabelRange(angle);
thirdParam->setPoints(start, end);
fourthParam->setPoints(start, Base::Vector3d());
fourthParam->setLabelRange(angle);
} break;
case SelectMode::SeekThird: {
if (!onViewParameters[OnViewParameter::Fifth]->isSet) {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (!fifthParam->isSet) {
double length = (onSketchPos - handler->referencePoint).Length();
setOnViewParameterValue(OnViewParameter::Fifth, length);
}
@@ -675,16 +689,16 @@ void DSHTranslateController::adaptParameters(Base::Vector2d onSketchPos)
double angle = vec2d.Angle();
double range = angle * 180 / std::numbers::pi;
if (!onViewParameters[OnViewParameter::Sixth]->isSet) {
if (!sixthParam->isSet) {
setOnViewParameterValue(OnViewParameter::Sixth, range, Base::Unit::Angle);
}
Base::Vector3d start = toVector3d(handler->referencePoint);
Base::Vector3d end = toVector3d(onSketchPos);
onViewParameters[OnViewParameter::Fifth]->setPoints(start, end);
onViewParameters[OnViewParameter::Sixth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Sixth]->setLabelRange(angle);
fifthParam->setPoints(start, end);
sixthParam->setPoints(start, Base::Vector3d());
sixthParam->setLabelRange(angle);
} break;
default:
break;
@@ -696,16 +710,18 @@ void DSHTranslateController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
auto& firstParam = onViewParameters[OnViewParameter::First];
auto& secondParam = onViewParameters[OnViewParameter::Second];
if (firstParam->isSet && secondParam->isSet) {
handler->setState(SelectMode::SeekSecond);
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Fourth]->hasFinishedEditing) {
auto& thirdParam = onViewParameters[OnViewParameter::Third];
auto& fourthParam = onViewParameters[OnViewParameter::Fourth];
if (thirdParam->hasFinishedEditing || fourthParam->hasFinishedEditing) {
if (handler->secondNumberOfCopies == 1) {
handler->setState(SelectMode::End);
}
@@ -715,9 +731,10 @@ void DSHTranslateController::doChangeDrawSketchHandlerMode()
}
} break;
case SelectMode::SeekThird: {
if (onViewParameters[OnViewParameter::Fifth]->hasFinishedEditing
|| onViewParameters[OnViewParameter::Sixth]->hasFinishedEditing) {
auto& fifthParam = onViewParameters[OnViewParameter::Fifth];
auto& sixthParam = onViewParameters[OnViewParameter::Sixth];
if (fifthParam->hasFinishedEditing || sixthParam->hasFinishedEditing) {
handler->setState(SelectMode::End);
}
} break;