forked from qt-creator/qt-creator
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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user