diff --git a/SOrbitCameraController.qml b/SOrbitCameraController.qml index 62fa45c..bd33bb8 100644 --- a/SOrbitCameraController.qml +++ b/SOrbitCameraController.qml @@ -10,10 +10,14 @@ Entity{ property real lookSpeed: 500 property real zoomLimit: 0.16 + MouseDevice { id: mouseDevice sensitivity: 0.001 // Make it more smooth } + KeyboardDevice { + id: keyboardDevice + } MouseHandler { id: mh @@ -28,15 +32,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 +57,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; + } + + + case Qt.Key_Left: + { + + leftORight(-100 * dt * linearSpeed) + + break; + + } + + + case Qt.Key_Right: + { + leftORight(100 * dt * linearSpeed) + + break; + + } + + } - camera.translate(Qt.vector3d(0, 0, ry), Camera.DontTranslateViewCenter) + } - function zoomDistance(posFirst, posSecond) { - return posSecond.minus(posFirst).length() + } + + + 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 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)) + } }