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,