From 9d1360fc8d3aec741907bf7a80d606bd4d22c6d3 Mon Sep 17 00:00:00 2001 From: Max Wilfinger Date: Wed, 11 Jun 2025 19:48:04 +0200 Subject: [PATCH] Gui: Fix dragger update when moving to target object and make flip independent of selected components. --- src/Gui/TaskTransform.cpp | 10 ++++++++-- src/Gui/TaskTransform.h | 3 ++- src/Gui/ViewProviderDragger.cpp | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Gui/TaskTransform.cpp b/src/Gui/TaskTransform.cpp index d118725373..b4e67ec3b2 100644 --- a/src/Gui/TaskTransform.cpp +++ b/src/Gui/TaskTransform.cpp @@ -515,7 +515,7 @@ void TaskTransform::onSelectionChanged(const SelectionChanges& msg) vp->setDraggerPlacement(vp->getObjectPlacement() * selectedObjectPlacement); if (msg.Type == SelectionChanges::AddSelection) { - moveObjectToDragger(); + moveObjectToDragger(getRelevantComponents()); setSelectionMode(SelectionMode::None); } @@ -545,10 +545,11 @@ void TaskTransform::onAlignToOtherObject() setSelectionMode(SelectionMode::SelectAlignTarget); } -void TaskTransform::moveObjectToDragger() +ViewProviderDragger::DraggerComponents TaskTransform::getRelevantComponents() { // Check which dragger components should be considered ViewProviderDragger::DraggerComponents components; + if (ui->matchXcheckbox->isChecked()) { components |= ViewProviderDragger::DraggerComponent::XPos; } @@ -578,6 +579,11 @@ void TaskTransform::moveObjectToDragger() components &= ~ViewProviderDragger::DraggerComponent::ZRot; } + return components; +} + +void TaskTransform::moveObjectToDragger(ViewProviderDragger::DraggerComponents components) +{ vp->updateTransformFromDragger(); vp->updatePlacementFromDragger(components); diff --git a/src/Gui/TaskTransform.h b/src/Gui/TaskTransform.h index 31a05c7dd9..7e06bbb3b6 100644 --- a/src/Gui/TaskTransform.h +++ b/src/Gui/TaskTransform.h @@ -125,7 +125,8 @@ private: void resetReferencePlacement(); void resetReferenceRotation(); - void moveObjectToDragger(); + ViewProviderDragger::DraggerComponents getRelevantComponents(); + void moveObjectToDragger(ViewProviderDragger::DraggerComponents components = ViewProviderDragger::DraggerComponent::All); bool isDraggerAlignedToCoordinateSystem() const; diff --git a/src/Gui/ViewProviderDragger.cpp b/src/Gui/ViewProviderDragger.cpp index be2278f143..ad7ed97490 100644 --- a/src/Gui/ViewProviderDragger.cpp +++ b/src/Gui/ViewProviderDragger.cpp @@ -313,6 +313,7 @@ void ViewProviderDragger::updatePlacementFromDragger(DraggerComponents component } placement->setValue((finalDraggerPlacement * getTransformOrigin().inverse())); + updateDraggerPosition(); } Base::Rotation Gui::ViewProviderDragger::orthonormalize(Base::Vector3d x,