diff --git a/src/tools/qml2puppet/mockfiles/qt6/EditCameraController.qml b/src/tools/qml2puppet/mockfiles/qt6/EditCameraController.qml index a76a1cdf08c..2d77aaf9877 100644 --- a/src/tools/qml2puppet/mockfiles/qt6/EditCameraController.qml +++ b/src/tools/qml2puppet/mockfiles/qt6/EditCameraController.qml @@ -138,7 +138,10 @@ Item { else nodes = targetNodes - _lookAtPoint = _generalHelper.alignView(camera, nodes, _lookAtPoint); + var newLookAtAndZoom = _generalHelper.alignView(camera, nodes, _lookAtPoint, + _defaultCameraLookAtDistance); + _lookAtPoint = newLookAtAndZoom.toVector3d(); + _zoomFactor = newLookAtAndZoom.w; storeCameraState(0); } diff --git a/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.cpp b/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.cpp index 4b47179915e..b33a480a450 100644 --- a/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.cpp +++ b/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.cpp @@ -494,12 +494,10 @@ void GeneralHelper::alignCameras(QQuick3DCamera *camera, const QVariant &nodes) // Aligns the camera to the first camera in nodes list. // Aligning means taking the position and XY rotation from the source camera. Rest of the properties // remain the same, as this is used to align edit cameras, which have fixed Z-rot, fov, and clips. -// The new lookAt is set at same distance away as it was previously and scale isn't adjusted, so -// the zoom factor of the edit camera stays the same. -QVector3D GeneralHelper::alignView(QQuick3DCamera *camera, const QVariant &nodes, - const QVector3D &lookAtPoint) +// The camera zoom is reset to default. +QVector4D GeneralHelper::alignView(QQuick3DCamera *camera, const QVariant &nodes, + const QVector3D &lookAtPoint, float defaultLookAtDistance) { - float lastDistance = (lookAtPoint - camera->position()).length(); const QVariantList varNodes = nodes.value(); QQuick3DCamera *cameraNode = nullptr; for (const auto &varNode : varNodes) { @@ -509,15 +507,24 @@ QVector3D GeneralHelper::alignView(QQuick3DCamera *camera, const QVariant &nodes } if (cameraNode) { + if (auto orthoCamera = qobject_cast(camera)) { + orthoCamera->setHorizontalMagnification(1.f); + orthoCamera->setVerticalMagnification(1.f); + // Force update on transform just in case position and rotation didn't change + float x = orthoCamera->x(); + orthoCamera->setX(x + 1.f); + orthoCamera->setX(x); + } camera->setPosition(cameraNode->scenePosition()); QVector3D newRotation = cameraNode->sceneRotation().toEulerAngles(); newRotation.setZ(0.f); camera->setEulerRotation(newRotation); + } - QVector3D lookAt = camera->position() + camera->forward() * lastDistance; + QVector3D lookAt = camera->position() + camera->forward() * defaultLookAtDistance; - return lookAt; + return QVector4D(lookAt, 1.f); } bool GeneralHelper::fuzzyCompare(double a, double b) diff --git a/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.h b/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.h index 781a19dbff5..5622918a64b 100644 --- a/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.h +++ b/src/tools/qml2puppet/qml2puppet/editor3d/generalhelper.h @@ -74,8 +74,8 @@ public: QQuick3DViewport *viewPort, float defaultLookAtDistance, bool closeUp); Q_INVOKABLE void alignCameras(QQuick3DCamera *camera, const QVariant &nodes); - Q_INVOKABLE QVector3D alignView(QQuick3DCamera *camera, const QVariant &nodes, - const QVector3D &lookAtPoint); + Q_INVOKABLE QVector4D alignView(QQuick3DCamera *camera, const QVariant &nodes, + const QVector3D &lookAtPoint, float defaultLookAtDistance); Q_INVOKABLE bool fuzzyCompare(double a, double b); Q_INVOKABLE void delayedPropertySet(QObject *obj, int delay, const QString &property, const QVariant& value);