From 2b5f46990c9151e459cc232eeca767f39f4bcfc9 Mon Sep 17 00:00:00 2001 From: Martin Dobias Date: Thu, 28 Jun 2018 17:20:13 +0200 Subject: [PATCH] [feature] Allow moving camera up/down using page up/down keys --- src/3d/qgscameracontroller.cpp | 20 ++++++++++++++++++++ src/3d/qgscameracontroller.h | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/src/3d/qgscameracontroller.cpp b/src/3d/qgscameracontroller.cpp index a6497fa0d110..80ef615c90ee 100644 --- a/src/3d/qgscameracontroller.cpp +++ b/src/3d/qgscameracontroller.cpp @@ -49,6 +49,9 @@ QgsCameraController::QgsCameraController( Qt3DCore::QNode *parent ) , mKeyboardTyPosInput( new Qt3DInput::QButtonAxisInput() ) , mKeyboardTxNegInput( new Qt3DInput::QButtonAxisInput() ) , mKeyboardTyNegInput( new Qt3DInput::QButtonAxisInput() ) + , mTelevAxis( new Qt3DInput::QAxis() ) + , mKeyboardTelevPosInput( new Qt3DInput::QButtonAxisInput() ) + , mKeyboardTelevNegInput( new Qt3DInput::QButtonAxisInput() ) { // not using QAxis + QAnalogAxisInput for mouse X,Y because @@ -115,6 +118,18 @@ QgsCameraController::QgsCameraController( Qt3DCore::QNode *parent ) mKeyboardTyNegInput->setSourceDevice( mKeyboardDevice ); mTyAxis->addInput( mKeyboardTyNegInput ); + // Keyboard Neg Telev + mKeyboardTelevNegInput->setButtons( QVector() << Qt::Key_PageDown ); + mKeyboardTelevNegInput->setScale( -1.0f ); + mKeyboardTelevNegInput->setSourceDevice( mKeyboardDevice ); + mTelevAxis->addInput( mKeyboardTelevNegInput ); + + // Keyboard Pos Telev + mKeyboardTelevPosInput->setButtons( QVector() << Qt::Key_PageUp ); + mKeyboardTelevPosInput->setScale( 1.0f ); + mKeyboardTelevPosInput->setSourceDevice( mKeyboardDevice ); + mTelevAxis->addInput( mKeyboardTelevPosInput ); + mLogicalDevice->addAction( mLeftMouseButtonAction ); mLogicalDevice->addAction( mMiddleMouseButtonAction ); mLogicalDevice->addAction( mRightMouseButtonAction ); @@ -123,6 +138,7 @@ QgsCameraController::QgsCameraController( Qt3DCore::QNode *parent ) mLogicalDevice->addAxis( mWheelAxis ); mLogicalDevice->addAxis( mTxAxis ); mLogicalDevice->addAxis( mTyAxis ); + mLogicalDevice->addAxis( mTelevAxis ); // Disable the logical device when the entity is disabled connect( this, &Qt3DCore::QEntity::enabledChanged, @@ -244,6 +260,7 @@ void QgsCameraController::frameTriggered( float dt ) float tx = mTxAxis->value() * dt * mCameraData.dist * 1.5; float ty = -mTyAxis->value() * dt * mCameraData.dist * 1.5; + float telev = mTelevAxis->value() * dt * 300; if ( !mShiftAction->isActive() && ( tx || ty ) ) { @@ -282,6 +299,9 @@ void QgsCameraController::frameTriggered( float dt ) mCameraData.y -= p2.y() - p1.y(); } + if ( telev != 0 ) + mCameraData.elev += telev; + if ( std::isnan( mCameraData.x ) || std::isnan( mCameraData.y ) ) { // something went horribly wrong but we need to at least try to fix it somehow diff --git a/src/3d/qgscameracontroller.h b/src/3d/qgscameracontroller.h index 8726e920d5d4..8be45d7d24ba 100644 --- a/src/3d/qgscameracontroller.h +++ b/src/3d/qgscameracontroller.h @@ -175,6 +175,10 @@ class _3D_EXPORT QgsCameraController : public Qt3DCore::QEntity Qt3DInput::QButtonAxisInput *mKeyboardTyPosInput = nullptr; Qt3DInput::QButtonAxisInput *mKeyboardTxNegInput = nullptr; Qt3DInput::QButtonAxisInput *mKeyboardTyNegInput = nullptr; + + Qt3DInput::QAxis *mTelevAxis = nullptr; + Qt3DInput::QButtonAxisInput *mKeyboardTelevPosInput = nullptr; + Qt3DInput::QButtonAxisInput *mKeyboardTelevNegInput = nullptr; }; #endif // QGSCAMERACONTROLLER_H