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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user