QmlPuppet: Reset gizmo orientation after multiselection rotation

Gizmo orientation in multiselection case should always be aligned to
the global axes, so we now reset multiselection on release
handlers of rotation gizmo.

Fixes: QDS-4492
Change-Id: Ic10f26f65df42869e4643f48457bcbcbf970fe9a
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Miikka Heikkinen
2021-06-10 16:01:27 +03:00
parent 5fdd82c553
commit 4e1ca8d3c5
4 changed files with 16 additions and 9 deletions
@@ -260,6 +260,9 @@ Node {
rotateGizmo.rotateCommit();
dragging = false;
if (targetNode == multiSelectionNode)
_generalHelper.resetMultiSelectionNode();
}
MouseArea3D {
@@ -131,6 +131,9 @@ Model {
rotateCommit();
currentAngle = 0;
currentMousePos = screenPos;
if (targetNode == multiSelectionNode)
_generalHelper.resetMultiSelectionNode();
}
MouseArea3D {
@@ -391,22 +391,17 @@ void GeneralHelper::setMultiSelectionTargets(QQuick3DNode *multiSelectRootNode,
[this]() {
// Reposition the multiselection root node if scene transform of any multiselected
// node changes outside of drag (i.e. changes originating from creator side)
if (!m_blockMultiSelectionNodePositioning) {
QVector3D newPos;
for (auto it = m_multiSelDataMap.begin(); it != m_multiSelDataMap.end(); ++it)
newPos += it.key()->scenePosition();
newPos /= m_multiSelDataMap.size();
m_multiSelectRootNode->setPosition(newPos);
}
if (!m_blockMultiSelectionNodePositioning)
resetMultiSelectionNode();
}));
}
}
restartMultiSelection();
resetMultiSelectionNode();
m_blockMultiSelectionNodePositioning = false;
}
void GeneralHelper::restartMultiSelection()
void GeneralHelper::resetMultiSelectionNode()
{
for (auto it = m_multiSelDataMap.begin(); it != m_multiSelDataMap.end(); ++it) {
it.value() = {it.key()->scenePosition(),
@@ -423,6 +418,11 @@ void GeneralHelper::restartMultiSelection()
m_multiSelectRootNode->setPosition(m_multiSelNodeData.startScenePos);
m_multiSelectRootNode->setRotation({});
m_multiSelectRootNode->setScale({1.f, 1.f, 1.f});
}
void GeneralHelper::restartMultiSelection()
{
resetMultiSelectionNode();
m_blockMultiSelectionNodePositioning = true;
}
@@ -94,6 +94,7 @@ public:
Q_INVOKABLE void setMultiSelectionTargets(QQuick3DNode *multiSelectRootNode,
const QVariantList &selectedList);
Q_INVOKABLE void resetMultiSelectionNode();
Q_INVOKABLE void restartMultiSelection();
Q_INVOKABLE QVariantList multiSelectionTargets() const;
Q_INVOKABLE void moveMultiSelection(bool commit);