Skip to content

Commit 5bac8a6

Browse files
authored
Merge pull request #5715 from nyalldawson/3d_ctrl
[3d] Holding ctrl results in finer view adjustments
2 parents 457abe7 + cf25b3e commit 5bac8a6

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

src/3d/qgscameracontroller.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ QgsCameraController::QgsCameraController( Qt3DCore::QNode *parent )
3737
, mRightMouseButtonInput( new Qt3DInput::QActionInput() )
3838
, mShiftAction( new Qt3DInput::QAction() )
3939
, mShiftInput( new Qt3DInput::QActionInput() )
40+
, mCtrlAction( new Qt3DInput::QAction() )
41+
, mCtrlInput( new Qt3DInput::QActionInput() )
4042
, mWheelAxis( new Qt3DInput::QAxis() )
4143
, mMouseWheelInput( new Qt3DInput::QAnalogAxisInput() )
4244
, mTxAxis( new Qt3DInput::QAxis() )
@@ -82,6 +84,11 @@ QgsCameraController::QgsCameraController( Qt3DCore::QNode *parent )
8284
mShiftInput->setSourceDevice( mKeyboardDevice );
8385
mShiftAction->addInput( mShiftInput );
8486

87+
// Keyboard ctrl
88+
mCtrlInput->setButtons( QVector<int>() << Qt::Key_Control );
89+
mCtrlInput->setSourceDevice( mKeyboardDevice );
90+
mCtrlAction->addInput( mCtrlInput );
91+
8592
// Keyboard Pos Tx
8693
mKeyboardTxPosInput->setButtons( QVector<int>() << Qt::Key_Right );
8794
mKeyboardTxPosInput->setScale( 1.0f );
@@ -110,6 +117,7 @@ QgsCameraController::QgsCameraController( Qt3DCore::QNode *parent )
110117
mLogicalDevice->addAction( mMiddleMouseButtonAction );
111118
mLogicalDevice->addAction( mRightMouseButtonAction );
112119
mLogicalDevice->addAction( mShiftAction );
120+
mLogicalDevice->addAction( mCtrlAction );
113121
mLogicalDevice->addAxis( mWheelAxis );
114122
mLogicalDevice->addAxis( mTxAxis );
115123
mLogicalDevice->addAxis( mTyAxis );
@@ -221,7 +229,8 @@ void QgsCameraController::frameTriggered( float dt )
221229
int dy = mMousePos.y() - mLastMousePos.y();
222230
mLastMousePos = mMousePos;
223231

224-
mCameraData.dist -= mCameraData.dist * mWheelAxis->value() * 10 * dt;
232+
double scaling = ( mCtrlAction->isActive() ? 0.1 : 1.0 );
233+
mCameraData.dist -= scaling * mCameraData.dist * mWheelAxis->value() * 10 * dt;
225234

226235
if ( mRightMouseButtonAction->isActive() )
227236
{

src/3d/qgscameracontroller.h

+3
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@ class _3D_EXPORT QgsCameraController : public Qt3DCore::QEntity
158158
Qt3DInput::QAction *mShiftAction = nullptr;
159159
Qt3DInput::QActionInput *mShiftInput = nullptr;
160160

161+
Qt3DInput::QAction *mCtrlAction = nullptr;
162+
Qt3DInput::QActionInput *mCtrlInput = nullptr;
163+
161164
Qt3DInput::QAxis *mWheelAxis = nullptr;
162165
Qt3DInput::QAnalogAxisInput *mMouseWheelInput = nullptr;
163166

0 commit comments

Comments
 (0)