diff options
author | Mahmoud Badri <mahmoud.badri@qt.io> | 2019-11-27 15:48:51 +0200 |
---|---|---|
committer | Mahmoud Badri <mahmoud.badri@qt.io> | 2019-12-03 07:54:09 +0000 |
commit | de141661df3caac507eb01da69f8a7b8ede75714 (patch) | |
tree | 5abd61bf5581cde067e95c8f5db55c09d6e48c4e | |
parent | 811db1129c68d1356bc196417cd50756365d39ed (diff) | |
download | qt-creator-de141661df3caac507eb01da69f8a7b8ede75714.tar.gz |
Do not zoom camera when changing view
When changing the view by clicking the axis helper, maintain the
current view camera zoom
Task-number: QDS-1274
Change-Id: Icb502bd70da1e6348be90a52885366393ea072c6
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
5 files changed, 15 insertions, 14 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelper.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelper.qml index 86c60db721..25fe455f49 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelper.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelper.qml @@ -120,8 +120,8 @@ View3D { onPressed: { pick(mouse); if (pickObj) { - axisHelperView.editCameraCtrl.fitObject(axisHelperView.selectedNode, - pickObj.cameraRotation); + axisHelperView.editCameraCtrl.focusObject(axisHelperView.selectedNode, + pickObj.cameraRotation, false); } else { mouse.accepted = false; } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditCameraController.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditCameraController.qml index dba7e30f96..b7f4109824 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditCameraController.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditCameraController.qml @@ -45,11 +45,11 @@ Item { property real _defaultCameraLookAtDistance: 0 property Camera _prevCamera: null - function fitObject(targetObject, rotation) + function focusObject(targetObject, rotation, updateZoom) { camera.rotation = rotation; - var newLookAtAndZoom = _generalHelper.fitObjectToCamera( - camera, _defaultCameraLookAtDistance, targetObject, view3d); + var newLookAtAndZoom = _generalHelper.focusObjectToCamera( + camera, _defaultCameraLookAtDistance, targetObject, view3d, _zoomFactor, updateZoom); _lookAtPoint = newLookAtAndZoom.toVector3d(); _zoomFactor = newLookAtAndZoom.w; } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml index ea033bea73..5de0f25348 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml @@ -443,7 +443,7 @@ Window { if (selected) { var targetNode = viewWindow.selectedNodes.length > 0 ? selectionBoxes[0].model : null; - cameraControl.fitObject(targetNode, editView.camera.rotation); + cameraControl.focusObject(targetNode, editView.camera.rotation, true); } } } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp index 850a440a12..b104d53a8f 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp @@ -139,8 +139,9 @@ float GeneralHelper::zoomCamera(QQuick3DCamera *camera, float distance, float de } // Return value contains new lookAt point (xyz) and zoom factor (w) -QVector4D GeneralHelper::fitObjectToCamera(QQuick3DCamera *camera, float defaultLookAtDistance, - QQuick3DNode *targetObject, QQuick3DViewport *viewPort) +QVector4D GeneralHelper::focusObjectToCamera(QQuick3DCamera *camera, float defaultLookAtDistance, + QQuick3DNode *targetObject, QQuick3DViewport *viewPort, + float oldZoom, bool updateZoom) { if (!camera) return QVector4D(0.f, 0.f, 0.f, 1.f); @@ -189,11 +190,10 @@ QVector4D GeneralHelper::fitObjectToCamera(QQuick3DCamera *camera, float default camera->setPosition(lookAt + newLookVector); - // Emprically determined algorithm for nice zoom - float newZoomFactor = qBound(.0001f, float(maxExtent / 700.), 10000.f); + float newZoomFactor = updateZoom ? qBound(.0001f, float(maxExtent / 700.), 10000.f) : oldZoom; + float cameraZoomFactor = zoomCamera(camera, 0, defaultLookAtDistance, lookAt, newZoomFactor, false); - return QVector4D(lookAt, - zoomCamera(camera, 0, defaultLookAtDistance, lookAt, newZoomFactor, false)); + return QVector4D(lookAt, cameraZoomFactor); } void GeneralHelper::delayedPropertySet(QObject *obj, int delay, const QString &property, diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h index 16007e6798..4744935190 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h @@ -62,8 +62,9 @@ public: Q_INVOKABLE float zoomCamera(QQuick3DCamera *camera, float distance, float defaultLookAtDistance, const QVector3D &lookAt, float zoomFactor, bool relative); - Q_INVOKABLE QVector4D fitObjectToCamera(QQuick3DCamera *camera, float defaultLookAtDistance, - QQuick3DNode *targetObject, QQuick3DViewport *viewPort); + Q_INVOKABLE QVector4D focusObjectToCamera(QQuick3DCamera *camera, float defaultLookAtDistance, + QQuick3DNode *targetObject, QQuick3DViewport *viewPort, + float oldZoom, bool updateZoom = true); Q_INVOKABLE void delayedPropertySet(QObject *obj, int delay, const QString &property, const QVariant& value); |