From 18ff97581a0bbc961a0f12829e22466f901998e2 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 15 Oct 2019 13:59:25 +0200 Subject: [PATCH] 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 Reviewed-by: Miikka Heikkinen --- .../qt5informationnodeinstanceserver.cpp | 27 ++++++++++++------- .../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 6b6ddadeaec..257ff92dacb 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 &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(); + } + } + } + return nullptr; +} + void Qt5InformationNodeInstanceServer::setup3DEditView(const QList &instanceList) { ServerNodeInstance root = rootNodeInstance(); @@ -157,15 +173,8 @@ void Qt5InformationNodeInstanceServer::setup3DEditView(const QList &instanceList); + QObject *findRootNodeOf3DViewport(const QList &instanceList) const; QSet m_parentChangedSet; QList m_completedComponentList;