diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2019-10-15 13:59:25 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2019-10-15 13:08:57 +0000 |
commit | 18ff97581a0bbc961a0f12829e22466f901998e2 (patch) | |
tree | 1993793d6245b92393968edd4f32e85f2ed22069 | |
parent | db3dc34a126b7ef5a5ac60b0c3313d6e4e8d7db1 (diff) |
QmlDesigner: Show 3D scene with multiple objects
A View3D can have multiple root nodes, which are
automatically aggregated in a single root node.
Change-Id: I3ad11eff5a8beadbd53f0fc8cdcaecd78772768b
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp | 27 | ||||
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h | 1 |
2 files changed, 19 insertions, 9 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 6b6ddadeae..257ff92dac 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -147,6 +147,22 @@ bool Qt5InformationNodeInstanceServer::isDirtyRecursiveForParentInstances(QQuick return false; } +QObject *Qt5InformationNodeInstanceServer::findRootNodeOf3DViewport( + const QList<ServerNodeInstance> &instanceList) const +{ + for (const ServerNodeInstance &instance : instanceList) { + if (instance.isSubclassOf("QQuick3DViewport")) { + for (const ServerNodeInstance &child : instanceList) { /* Look for scene node */ + /* The QQuick3DViewport always creates a root node. + * This root node contains the complete scene. */ + if (child.isSubclassOf("QQuick3DNode") && child.parent() == instance) + return child.internalObject()->property("parent").value<QObject *>(); + } + } + } + return nullptr; +} + void Qt5InformationNodeInstanceServer::setup3DEditView(const QList<ServerNodeInstance> &instanceList) { ServerNodeInstance root = rootNodeInstance(); @@ -157,15 +173,8 @@ void Qt5InformationNodeInstanceServer::setup3DEditView(const QList<ServerNodeIns if (root.isSubclassOf("QQuick3DNode")) { node = root.internalObject(); showCustomLight = true; // Pure node scene we should add a custom light - } else { // Look for QQuick3DView - for (const ServerNodeInstance &instance : instanceList) { - if (instance.isSubclassOf("QQuick3DViewport")) { - for (const ServerNodeInstance &child : instanceList) { /* Look for scene node */ - if (child.isSubclassOf("QQuick3DNode") && child.parent() == instance) - node = child.internalObject(); - } - } - } + } else { + node = findRootNodeOf3DViewport(instanceList); } if (node) { // If we found a scene we create the edit view diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index c9e7ad0dbc..9254cb4157 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -52,6 +52,7 @@ protected: private: void setup3DEditView(const QList<ServerNodeInstance> &instanceList); + QObject *findRootNodeOf3DViewport(const QList<ServerNodeInstance> &instanceList) const; QSet<ServerNodeInstance> m_parentChangedSet; QList<ServerNodeInstance> m_completedComponentList; |