forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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,
|
||||
|
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user