QmlDesigner: Camera should be a scene object

SceneManager should exist for the camera node. Otherwise, we shouldn't
show the camera display.

Fixes: QDS-13582
Fixes: QDS-13583
Pick-to: 4.6
Change-Id: I03984172c6ac2faffa5381f7fb227396076e7527
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
Ali Kianian
2024-09-10 15:56:19 +03:00
parent 45cebed389
commit bb25a4d196
3 changed files with 14 additions and 13 deletions

View File

@@ -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() {

View File

@@ -692,18 +692,19 @@ bool GeneralHelper::isOrthographicCamera(QQuick3DNode *node) const
return node && qobject_cast<QQuick3DOrthographicCamera *>(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

View File

@@ -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;