QmlDesigner: Store 3D split view camera angles per split

Splits 1-3 default to axis oriented views.

Fixes: QDS-10996
Change-Id: I111c9b76ae335f8630eeae5e51bbefb2e702f6df
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Miikka Heikkinen
2023-10-23 12:59:42 +03:00
parent 09f13dea04
commit ea7aca28c7
2 changed files with 37 additions and 18 deletions

View File

@@ -37,7 +37,6 @@ Item {
if (!camera || ignoreToolState)
return;
// TODO: handle camera control state separately for each split
_lookAtPoint = cameraState[0];
_zoomFactor = cameraState[1];
camera.position = cameraState[2];
@@ -51,13 +50,21 @@ Item {
if (!camera)
return;
// TODO: handle camera control state separately for each split
_lookAtPoint = Qt.vector3d(0, 0, 0);
_zoomFactor = 1;
camera.position = _defaultCameraPosition;
camera.eulerRotation = _defaultCameraRotation;
_generalHelper.zoomCamera(view3d, camera, 0, _defaultCameraLookAtDistance, _lookAtPoint,
_zoomFactor, false);
if (splitId === 1) {
jumpToRotation(originGizmo.quaternionForAxis(OriginGizmo.PositiveZ));
} else if (splitId === 2) {
jumpToRotation(originGizmo.quaternionForAxis(OriginGizmo.NegativeY));
} else if (splitId === 3) {
jumpToRotation(originGizmo.quaternionForAxis(OriginGizmo.NegativeX));
} else {
camera.position = _defaultCameraPosition;
camera.eulerRotation = _defaultCameraRotation;
_generalHelper.zoomCamera(view3d, camera, 0, _defaultCameraLookAtDistance, _lookAtPoint,
_zoomFactor, false);
}
}
function storeCameraState(delay)
@@ -65,13 +72,12 @@ Item {
if (!camera || ignoreToolState)
return;
// TODO: handle camera control state separately for each split
var cameraState = [];
cameraState[0] = _lookAtPoint;
cameraState[1] = _zoomFactor;
cameraState[2] = camera.position;
cameraState[3] = camera.rotation;
_generalHelper.storeToolState(sceneId, "editCamState", cameraState, delay);
_generalHelper.storeToolState(sceneId, "editCamState" + splitId, cameraState, delay);
}
function focusObject(targetNodes, rotation, updateZoom, closeUp)
@@ -249,6 +255,7 @@ Item {
}
OriginGizmo {
id: originGizmo
anchors.right: parent.right
anchors.top: parent.top
anchors.margins: 10

View File

@@ -12,7 +12,7 @@ Item {
visible: true
property Node activeScene: null
property int activeSplit: 0
property int activeSplit: 0
property var editViews: [null, null, null, null]
property var overlayViews: [overlayView0, overlayView1, overlayView2, overlayView3]
property var cameraControls: [cameraControl0, cameraControl1, cameraControl2, cameraControl3]
@@ -69,6 +69,10 @@ Item {
onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
onSplitViewChanged: _generalHelper.storeToolState(sceneId, "splitView", splitView)
onActiveSplitChanged: {
_generalHelper.storeToolState(sceneId, "activeSplit", activeSplit);
cameraControls[activeSplit].forceActiveFocus();
}
onActiveSceneChanged: updateActiveScene()
@@ -100,10 +104,7 @@ Item {
editViews[2].cameraLookAt = Qt.binding(function() {return cameraControl2._lookAtPoint;});
editViews[3].cameraLookAt = Qt.binding(function() {return cameraControl3._lookAtPoint;});
activeSplit = 0;
selectionBoxCount = 0;
cameraControl0.forceActiveFocus();
editViewsChanged();
return true;
}
@@ -140,6 +141,11 @@ Item {
}
}
showEditLight = !hasSceneLight;
// Don't inherit camera angles from the previous scene
for (let i = 0; i < 4; ++i)
cameraControls[i].restoreDefaultState();
storeCurrentToolStates();
}
} else {
@@ -315,19 +321,24 @@ Item {
transformMode = EditView3D.TransformMode.Move;
for (var i = 0; i < 4; ++i) {
if ("editCamState" in toolStates)
cameraControls[i].restoreCameraState(toolStates.editCamState);
let propId = "editCamState" + i;
if (propId in toolStates)
cameraControls[i].restoreCameraState(toolStates[propId]);
else if (resetToDefault)
cameraControls[i].restoreDefaultState();
}
if ("splitView" in toolStates) {
if ("splitView" in toolStates)
splitView = toolStates.splitView;
activeSplit = 0;
} else if (resetToDefault) {
else if (resetToDefault)
splitView = false;
if (!splitView)
activeSplit = 0;
else if ("activeSplit" in toolStates)
activeSplit = toolStates.activeSplit;
else if (resetToDefault)
activeSplit = 0;
}
}
function storeCurrentToolStates()
@@ -344,6 +355,7 @@ Item {
_generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
_generalHelper.storeToolState(sceneId, "transformMode", transformMode);
_generalHelper.storeToolState(sceneId, "splitView", splitView)
_generalHelper.storeToolState(sceneId, "activeSplit", activeSplit)
for (var i = 0; i < 4; ++i)
cameraControls[i].storeCameraState(0);