diff --git a/src/tools/qml2puppet/mockfiles/qt6/CameraView.qml b/src/tools/qml2puppet/mockfiles/qt6/CameraView.qml index fe886a71d68..53040ec318f 100644 --- a/src/tools/qml2puppet/mockfiles/qt6/CameraView.qml +++ b/src/tools/qml2puppet/mockfiles/qt6/CameraView.qml @@ -46,10 +46,10 @@ Rectangle { property Camera camera property Camera oldCamera - property bool view3dRootNodeExists + property bool cameraIsSceneObject property bool forceDeactive: false readonly property bool cameraViewIsOn: !forceDeactive && (cameraView.alwaysOn || cameraView.showCameraView) && priv.camera - readonly property bool cameraHasValidScene: priv.cameraViewIsOn && priv.view3dRootNodeExists + readonly property bool cameraHasValidScene: priv.cameraViewIsOn && priv.cameraIsSceneObject property Loader activeLoader readonly property size loaderSize: activeLoader && activeLoader.active ? Qt.size(activeLoader.width, activeLoader.height) @@ -58,7 +58,7 @@ Rectangle { function updateCamera() { let activeCam = activeCamera() priv.camera = activeCam - priv.view3dRootNodeExists = _generalHelper.view3dRootNode(activeCam) + priv.cameraIsSceneObject = _generalHelper.isSceneObject(activeCam) } function activeCamera() { diff --git a/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.cpp b/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.cpp index 9392787e4c6..4d57c0d1646 100644 --- a/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.cpp +++ b/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.cpp @@ -692,18 +692,19 @@ bool GeneralHelper::isOrthographicCamera(QQuick3DNode *node) const return node && qobject_cast(node); } -QQuick3DNode *GeneralHelper::view3dRootNode(QQuick3DNode *node) const +bool GeneralHelper::isSceneObject(QQuick3DNode *node) const { if (!node) - return nullptr; + return false; - QQuick3DNode *parentNode = node->parentNode(); - while (parentNode) { - if (parentNode->inherits("QQuick3DSceneRootNode")) - return parentNode; - parentNode = parentNode->parentNode(); - } - return nullptr; + const auto objectPrivate = QQuick3DObjectPrivate::get(node); + const QQuick3DSceneManager *importSceneManager = objectPrivate->sceneManager; + if (!importSceneManager) + return false; + + const QQuick3DObject *sceneObject + = importSceneManager->m_nodeMap.value(objectPrivate->spatialNode, nullptr); + return sceneObject != nullptr; } // Emitter gizmo model creation is done in C++ as creating dynamic properties and diff --git a/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.h b/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.h index aec9c4970e6..3a2082f8179 100644 --- a/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.h +++ b/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.h @@ -97,7 +97,7 @@ public: Q_INVOKABLE bool isPickable(QQuick3DNode *node) const; Q_INVOKABLE bool isCamera(QQuick3DNode *node) const; Q_INVOKABLE bool isOrthographicCamera(QQuick3DNode *node) const; - Q_INVOKABLE QQuick3DNode *view3dRootNode(QQuick3DNode *node) const; + Q_INVOKABLE bool isSceneObject(QQuick3DNode *node) const; Q_INVOKABLE QQuick3DNode *createParticleEmitterGizmoModel(QQuick3DNode *emitter, QQuick3DMaterial *material) const;