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