Skip to content

Commit

Permalink
some fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
NEDJIMAbelgacem authored and nyalldawson committed Jan 13, 2021
1 parent 36e3229 commit f24dc8c
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 13 deletions.
42 changes: 29 additions & 13 deletions src/3d/qgscameracontroller.cpp
Expand Up @@ -375,18 +375,7 @@ void QgsCameraController::onPositionChanged( Qt3DInput::QMouseEvent *mouse )
mMousePos = QPoint( mouse->x(), mouse->y() );
}

void QgsCameraController::onPositionChangedFlyNavigation( Qt3DInput::QMouseEvent *mouse )
{
if ( !mMousePressed )
return;
int dx = mouse->x() - mMousePos.x();
int dy = mouse->y() - mMousePos.y();
float diffPitch = 0.2f * dy;
float diffYaw = - 0.2f * dx;
rotateCamera( diffPitch, diffYaw );
updateCameraFromPose( false );
mMousePos = QPoint( mouse->x(), mouse->y() );
}


void QgsCameraController::zoom( float factor )
{
Expand All @@ -410,16 +399,18 @@ void QgsCameraController::onMousePressed( Qt3DInput::QMouseEvent *mouse )
{
Q_UNUSED( mouse )
mKeyboardHandler->setFocus( true );
if ( mouse->button() == Qt3DInput::QMouseEvent::Buttons::LeftButton )
if ( mouse->button() == Qt3DInput::QMouseEvent::LeftButton || mouse->button() == Qt3DInput::QMouseEvent::RightButton || mouse->button() == Qt3DInput::QMouseEvent::MiddleButton )
{
mMousePos = QPoint( mouse->x(), mouse->y() );
mPressedButton = mouse->button();
mMousePressed = true;
}
}

void QgsCameraController::onMouseReleased( Qt3DInput::QMouseEvent *mouse )
{
Q_UNUSED( mouse )
mPressedButton = Qt3DInput::QMouseEvent::NoButton;
mMousePressed = false;
}

Expand Down Expand Up @@ -531,6 +522,31 @@ void QgsCameraController::onKeyPressedFlyNavigation( Qt3DInput::QKeyEvent *event
moveCameraPositionBy( cameraPosDiff );
}

void QgsCameraController::onPositionChangedFlyNavigation( Qt3DInput::QMouseEvent *mouse )
{
if ( !mMousePressed )
return;
double dx = mouse->x() - mMousePos.x();
double dy = mouse->y() - mMousePos.y();
if ( mPressedButton == Qt3DInput::QMouseEvent::LeftButton || mPressedButton == Qt3DInput::QMouseEvent::MiddleButton )
{
float diffPitch = 0.2f * dy;
float diffYaw = - 0.2f * dx;
rotateCamera( diffPitch, diffYaw );
updateCameraFromPose( false );
}
else if ( mPressedButton == Qt3DInput::QMouseEvent::RightButton )
{
QVector3D cameraUp = mCamera->upVector().normalized();
QVector3D cameraFront = ( QVector3D( mCameraPose.centerPoint().x(), mCameraPose.centerPoint().y(), mCameraPose.centerPoint().z() ) - mCamera->position() ).normalized();
QVector3D cameraLeft = QVector3D::crossProduct( cameraUp, cameraFront );
QVector3D cameraPosDiff = dx / mViewport.width() * cameraLeft + dy / mViewport.height() * cameraUp;
moveCameraPositionBy( 5.0 * mCameraMovementSpeed * cameraPosDiff );
}

mMousePos = QPoint( mouse->x(), mouse->y() );
}

void QgsCameraController::onKeyReleased( Qt3DInput::QKeyEvent *event )
{
Q_UNUSED( event )
Expand Down
2 changes: 2 additions & 0 deletions src/3d/qgscameracontroller.h
Expand Up @@ -21,6 +21,7 @@
#include <QPointer>
#include <QRect>
#include <Qt3DCore/QEntity>
#include <Qt3DInput/QMouseEvent>

namespace Qt3DInput
{
Expand Down Expand Up @@ -221,6 +222,7 @@ class _3D_EXPORT QgsCameraController : public Qt3DCore::QEntity
//! Last mouse position recorded
QPoint mMousePos;
bool mMousePressed = false;
Qt3DInput::QMouseEvent::Buttons mPressedButton = Qt3DInput::QMouseEvent::Buttons::NoButton;

//! Delegates mouse events to the attached MouseHandler objects
Qt3DInput::QMouseDevice *mMouseDevice = nullptr;
Expand Down

0 comments on commit f24dc8c

Please sign in to comment.