Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 114 additions & 6 deletions SOrbitCameraController.qml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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))

}
}