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)
|
if (!camera || ignoreToolState)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// TODO: handle camera control state separately for each split
|
|
||||||
_lookAtPoint = cameraState[0];
|
_lookAtPoint = cameraState[0];
|
||||||
_zoomFactor = cameraState[1];
|
_zoomFactor = cameraState[1];
|
||||||
camera.position = cameraState[2];
|
camera.position = cameraState[2];
|
||||||
@@ -51,13 +50,21 @@ Item {
|
|||||||
if (!camera)
|
if (!camera)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// TODO: handle camera control state separately for each split
|
|
||||||
_lookAtPoint = Qt.vector3d(0, 0, 0);
|
_lookAtPoint = Qt.vector3d(0, 0, 0);
|
||||||
_zoomFactor = 1;
|
_zoomFactor = 1;
|
||||||
camera.position = _defaultCameraPosition;
|
|
||||||
camera.eulerRotation = _defaultCameraRotation;
|
if (splitId === 1) {
|
||||||
_generalHelper.zoomCamera(view3d, camera, 0, _defaultCameraLookAtDistance, _lookAtPoint,
|
jumpToRotation(originGizmo.quaternionForAxis(OriginGizmo.PositiveZ));
|
||||||
_zoomFactor, false);
|
} 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)
|
function storeCameraState(delay)
|
||||||
@@ -65,13 +72,12 @@ Item {
|
|||||||
if (!camera || ignoreToolState)
|
if (!camera || ignoreToolState)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// TODO: handle camera control state separately for each split
|
|
||||||
var cameraState = [];
|
var cameraState = [];
|
||||||
cameraState[0] = _lookAtPoint;
|
cameraState[0] = _lookAtPoint;
|
||||||
cameraState[1] = _zoomFactor;
|
cameraState[1] = _zoomFactor;
|
||||||
cameraState[2] = camera.position;
|
cameraState[2] = camera.position;
|
||||||
cameraState[3] = camera.rotation;
|
cameraState[3] = camera.rotation;
|
||||||
_generalHelper.storeToolState(sceneId, "editCamState", cameraState, delay);
|
_generalHelper.storeToolState(sceneId, "editCamState" + splitId, cameraState, delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
function focusObject(targetNodes, rotation, updateZoom, closeUp)
|
function focusObject(targetNodes, rotation, updateZoom, closeUp)
|
||||||
@@ -249,6 +255,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
OriginGizmo {
|
OriginGizmo {
|
||||||
|
id: originGizmo
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.margins: 10
|
anchors.margins: 10
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Item {
|
|||||||
visible: true
|
visible: true
|
||||||
|
|
||||||
property Node activeScene: null
|
property Node activeScene: null
|
||||||
property int activeSplit: 0
|
property int activeSplit: 0
|
||||||
property var editViews: [null, null, null, null]
|
property var editViews: [null, null, null, null]
|
||||||
property var overlayViews: [overlayView0, overlayView1, overlayView2, overlayView3]
|
property var overlayViews: [overlayView0, overlayView1, overlayView2, overlayView3]
|
||||||
property var cameraControls: [cameraControl0, cameraControl1, cameraControl2, cameraControl3]
|
property var cameraControls: [cameraControl0, cameraControl1, cameraControl2, cameraControl3]
|
||||||
@@ -69,6 +69,10 @@ Item {
|
|||||||
onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
||||||
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
||||||
onSplitViewChanged: _generalHelper.storeToolState(sceneId, "splitView", splitView)
|
onSplitViewChanged: _generalHelper.storeToolState(sceneId, "splitView", splitView)
|
||||||
|
onActiveSplitChanged: {
|
||||||
|
_generalHelper.storeToolState(sceneId, "activeSplit", activeSplit);
|
||||||
|
cameraControls[activeSplit].forceActiveFocus();
|
||||||
|
}
|
||||||
|
|
||||||
onActiveSceneChanged: updateActiveScene()
|
onActiveSceneChanged: updateActiveScene()
|
||||||
|
|
||||||
@@ -100,10 +104,7 @@ Item {
|
|||||||
editViews[2].cameraLookAt = Qt.binding(function() {return cameraControl2._lookAtPoint;});
|
editViews[2].cameraLookAt = Qt.binding(function() {return cameraControl2._lookAtPoint;});
|
||||||
editViews[3].cameraLookAt = Qt.binding(function() {return cameraControl3._lookAtPoint;});
|
editViews[3].cameraLookAt = Qt.binding(function() {return cameraControl3._lookAtPoint;});
|
||||||
|
|
||||||
activeSplit = 0;
|
|
||||||
|
|
||||||
selectionBoxCount = 0;
|
selectionBoxCount = 0;
|
||||||
cameraControl0.forceActiveFocus();
|
|
||||||
editViewsChanged();
|
editViewsChanged();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -140,6 +141,11 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
showEditLight = !hasSceneLight;
|
showEditLight = !hasSceneLight;
|
||||||
|
|
||||||
|
// Don't inherit camera angles from the previous scene
|
||||||
|
for (let i = 0; i < 4; ++i)
|
||||||
|
cameraControls[i].restoreDefaultState();
|
||||||
|
|
||||||
storeCurrentToolStates();
|
storeCurrentToolStates();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -315,19 +321,24 @@ Item {
|
|||||||
transformMode = EditView3D.TransformMode.Move;
|
transformMode = EditView3D.TransformMode.Move;
|
||||||
|
|
||||||
for (var i = 0; i < 4; ++i) {
|
for (var i = 0; i < 4; ++i) {
|
||||||
if ("editCamState" in toolStates)
|
let propId = "editCamState" + i;
|
||||||
cameraControls[i].restoreCameraState(toolStates.editCamState);
|
if (propId in toolStates)
|
||||||
|
cameraControls[i].restoreCameraState(toolStates[propId]);
|
||||||
else if (resetToDefault)
|
else if (resetToDefault)
|
||||||
cameraControls[i].restoreDefaultState();
|
cameraControls[i].restoreDefaultState();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("splitView" in toolStates) {
|
if ("splitView" in toolStates)
|
||||||
splitView = toolStates.splitView;
|
splitView = toolStates.splitView;
|
||||||
activeSplit = 0;
|
else if (resetToDefault)
|
||||||
} else if (resetToDefault) {
|
|
||||||
splitView = false;
|
splitView = false;
|
||||||
|
|
||||||
|
if (!splitView)
|
||||||
|
activeSplit = 0;
|
||||||
|
else if ("activeSplit" in toolStates)
|
||||||
|
activeSplit = toolStates.activeSplit;
|
||||||
|
else if (resetToDefault)
|
||||||
activeSplit = 0;
|
activeSplit = 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function storeCurrentToolStates()
|
function storeCurrentToolStates()
|
||||||
@@ -344,6 +355,7 @@ Item {
|
|||||||
_generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
_generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
||||||
_generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
_generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
||||||
_generalHelper.storeToolState(sceneId, "splitView", splitView)
|
_generalHelper.storeToolState(sceneId, "splitView", splitView)
|
||||||
|
_generalHelper.storeToolState(sceneId, "activeSplit", activeSplit)
|
||||||
|
|
||||||
for (var i = 0; i < 4; ++i)
|
for (var i = 0; i < 4; ++i)
|
||||||
cameraControls[i].storeCameraState(0);
|
cameraControls[i].storeCameraState(0);
|
||||||
|
|||||||
Reference in New Issue
Block a user