From c79ce87bf2c98c70ec3ae1dc120bf2f618460f32 Mon Sep 17 00:00:00 2001 From: Parisa <44742050+parisa-hr@users.noreply.github.com> Date: Thu, 17 Jun 2021 17:27:12 +0430 Subject: [PATCH 1/2] Update SOrbitCameraController.qml Add Keyboard functionalities to code . with up arrow and down arrow move the camera to up and down with left and right arrows move the camera to left and right . and with page up and page down can zoom in / out. **The most important thing is that set focus true in your scene3d . that makes keyboard to work.** --- SOrbitCameraController.qml | 123 +++++++++++++++++++++++++++++++++++-- 1 file changed, 117 insertions(+), 6 deletions(-) diff --git a/SOrbitCameraController.qml b/SOrbitCameraController.qml index 62fa45c..12cdad5 100644 --- a/SOrbitCameraController.qml +++ b/SOrbitCameraController.qml @@ -10,10 +10,17 @@ Entity{ property real lookSpeed: 500 property real zoomLimit: 0.16 + + + InputSettings {} + MouseDevice { id: mouseDevice sensitivity: 0.001 // Make it more smooth } + KeyboardDevice { + id: keyboardDevice + } MouseHandler { id: mh @@ -28,15 +35,22 @@ Entity{ onPressed: { lastPos = Qt.point(mouse.x, mouse.y); + + } onPositionChanged: { + if(!root.enabled) return; + // You can change the button as you like for rotation or translation if (mouse.buttons === 1){ // Left button for rotation pan = -(mouse.x - lastPos.x) * dt * lookSpeed; + tilt = (mouse.y - lastPos.y) * dt * lookSpeed; + } else if (mouse.buttons === 2) { // Right button for translate var rx = -(mouse.x - lastPos.x) * dt * linearSpeed; var ry = (mouse.y - lastPos.y) * dt * linearSpeed; + camera.translate(Qt.vector3d(rx, ry, 0)) } else if (mouse.buttons === 3) { // Left & Right button for zoom ry = (mouse.y - lastPos.y) * dt * linearSpeed @@ -46,19 +60,116 @@ Entity{ lastPos = Qt.point(mouse.x, mouse.y) } onWheel: { + if(!root.enabled) return; + zoom(wheel.angleDelta.y * dt * linearSpeed) } - function zoom(ry) { - if (ry > 0 && zoomDistance(camera.position, camera.viewCenter) < zoomLimit) { - return + + } + + KeyboardHandler { + id: keyboardHandler + sourceDevice: keyboardDevice + focus: true + + onPressed: { + + switch(event.key) + { + + case Qt.Key_PageUp: + { + zoom(120 * dt * linearSpeed) + + break; + + } + case Qt.Key_PageDown: + { + + zoom(-120 * dt * linearSpeed) + + break; + + } + + + case Qt.Key_Up: + { + upODown(100 * dt * linearSpeed) + + break; + } + + + case Qt.Key_Down: + { + upODown(-100 * dt * linearSpeed) + + break; } - camera.translate(Qt.vector3d(0, 0, ry), Camera.DontTranslateViewCenter) + + case Qt.Key_Left: + { + + leftORight(-100 * dt * linearSpeed) + + break; + + } + + + case Qt.Key_Right: + { + leftORight(100 * dt * linearSpeed) + + break; + + } + + + } + + + } + + } + + + function zoom(rz) { + if (rz > 0 && zoomDistance(camera.position, camera.viewCenter) < zoomLimit) { + return + } + + camera.translate(Qt.vector3d(0, 0, rz), Camera.DontTranslateViewCenter) + } + + function zoomDistance(posFirst, posSecond) { + return posSecond.minus(posFirst).length() + } + + function leftORight(rx) + { + if (rx > 0 && zoomDistance(camera.position, camera.viewCenter) < zoomLimit) { + return } + camera.setUpVector(Qt.vector3d( 0.0, 1.0, 0.0 )) + + camera.translate(Qt.vector3d(rx, 0, 0)) + - function zoomDistance(posFirst, posSecond) { - return posSecond.minus(posFirst).length() + } + + function upODown(ry) + { + if (ry > 0 && zoomDistance(camera.position, camera.viewCenter) < zoomLimit) { + return } + camera.setUpVector(Qt.vector3d( 0.0, 1.0, 0.0 )) + + camera.translate(Qt.vector3d(0, ry, 0)) + } } From e6bd3cb7589d6cba7de9d8d5088d6950e384c2f5 Mon Sep 17 00:00:00 2001 From: Parisa <44742050+parisa-hr@users.noreply.github.com> Date: Thu, 17 Jun 2021 17:35:14 +0430 Subject: [PATCH 2/2] Update SOrbitCameraController.qml remove mistakes --- SOrbitCameraController.qml | 3 --- 1 file changed, 3 deletions(-) diff --git a/SOrbitCameraController.qml b/SOrbitCameraController.qml index 12cdad5..bd33bb8 100644 --- a/SOrbitCameraController.qml +++ b/SOrbitCameraController.qml @@ -11,9 +11,6 @@ Entity{ property real zoomLimit: 0.16 - - InputSettings {} - MouseDevice { id: mouseDevice sensitivity: 0.001 // Make it more smooth