diff --git a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp index 620cd037d9..891971dbc5 100644 --- a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp @@ -588,9 +588,7 @@ void TaskRevolutionParameters::onAxisChanged(int num) recomputeFeature(); - if (gizmoContainer) { - setGizmoPositions(); - } + setGizmoPositions(); } catch (const Base::Exception& e) { e.reportException(); @@ -615,9 +613,7 @@ void TaskRevolutionParameters::onReversed(bool on) propReversed->setValue(on); recomputeFeature(); - if (gizmoContainer) { - reverseGizmoDir(); - } + setGizmoPositions(); } } @@ -749,9 +745,6 @@ void TaskRevolutionParameters::setupGizmos(ViewProvider* vp) rotationGizmo2->flipArrow(); setGizmoPositions(); - if (getReversed()) { - reverseGizmoDir(); - } setGizmoVisibility(); } @@ -764,38 +757,43 @@ void TaskRevolutionParameters::setGizmoPositions() Base::Vector3d profileCog; Base::Vector3d basePos; Base::Vector3d axisDir; + bool reversed = false; - if (isGroove) { - auto groove = getObject(); - if (!groove || groove->isError()) { - gizmoContainer->visible = false; - return; + auto getFeatureProps = [&profileCog, &basePos, &axisDir, &reversed](auto* feature) { + if (!feature || feature->isError()) { + return false; } - Part::TopoShape profile = groove->getProfileShape(); + Part::TopoShape profile = feature->getProfileShape(); profile.getCenterOfGravity(profileCog); - basePos = groove->Base.getValue(); - axisDir = groove->Axis.getValue(); + basePos = feature->Base.getValue(); + axisDir = feature->Axis.getValue(); + reversed = feature->Reversed.getValue(); + return true; + }; + + bool ret; + if (isGroove) { + ret = getFeatureProps(getObject()); } else { - auto revolution = getObject(); - if (!revolution || revolution->isError()) { - gizmoContainer->visible = false; - return; - } - Part::TopoShape profile = revolution->getProfileShape(); - - profile.getCenterOfGravity(profileCog); - basePos = revolution->Base.getValue(); - axisDir = revolution->Axis.getValue(); + ret = getFeatureProps(getObject()); + } + + gizmoContainer->visible = ret; + if (!ret) { + return; } - gizmoContainer->visible = true; auto diff = profileCog - basePos; axisDir.Normalize(); auto axisComp = axisDir * diff.Dot(axisDir); auto normalComp = diff - axisComp; + if (reversed) { + axisDir = -axisDir; + } + rotationGizmo->Gizmo::setDraggerPlacement(basePos + axisComp, normalComp); rotationGizmo->getDraggerContainer()->setArcNormalDirection(Base::convertTo(axisDir)); @@ -803,15 +801,6 @@ void TaskRevolutionParameters::setGizmoPositions() rotationGizmo2->getDraggerContainer()->setArcNormalDirection(Base::convertTo(-axisDir)); } -void TaskRevolutionParameters::reverseGizmoDir() -{ - rotationGizmo->setMultFactor(-rotationGizmo->getMultFactor()); - rotationGizmo->flipArrow(); - - rotationGizmo2->setMultFactor(-rotationGizmo2->getMultFactor()); - rotationGizmo2->flipArrow(); -} - void TaskRevolutionParameters::setGizmoVisibility() { auto type = static_cast(ui->changeMode->currentIndex()); diff --git a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h index cfb07730ba..e0aa3bb5d0 100644 --- a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h +++ b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h @@ -137,7 +137,6 @@ private: Gui::RadialGizmo* rotationGizmo2 = nullptr; void setupGizmos(ViewProvider* vp); void setGizmoPositions(); - void reverseGizmoDir(); void setGizmoVisibility(); };