Skip to content

Commit

Permalink
add navigation switching hotkey ctrl + ~
Browse files Browse the repository at this point in the history
  • Loading branch information
NEDJIMAbelgacem authored and nyalldawson committed Jan 13, 2021
1 parent c316c7b commit 5ebab69
Show file tree
Hide file tree
Showing 9 changed files with 40 additions and 16 deletions.
9 changes: 2 additions & 7 deletions src/3d/qgs3dmapscene.cpp
Expand Up @@ -142,7 +142,6 @@ Qgs3DMapScene::Qgs3DMapScene( const Qgs3DMapSettings &map, QgsAbstract3DEngine *
connect( &map, &Qgs3DMapSettings::debugShadowMapSettingsChanged, this, &Qgs3DMapScene::onDebugShadowMapSettingsChanged );
connect( &map, &Qgs3DMapSettings::debugDepthMapSettingsChanged, this, &Qgs3DMapScene::onDebugDepthMapSettingsChanged );
connect( &map, &Qgs3DMapSettings::fpsCounterEnabledChanged, this, &Qgs3DMapScene::fpsCounterEnabledChanged );
connect( &map, &Qgs3DMapSettings::cameraNavigationModeChanged, this, &Qgs3DMapScene::onCameraNavigationModeChanged );
connect( &map, &Qgs3DMapSettings::cameraMovementSpeedChanged, this, &Qgs3DMapScene::onCameraMovementSpeedChanged );

connect( QgsApplication::instance()->sourceCache(), &QgsSourceCache::remoteSourceFetched, this, [ = ]( const QString & url )
Expand Down Expand Up @@ -197,6 +196,7 @@ Qgs3DMapScene::Qgs3DMapScene( const Qgs3DMapSettings &map, QgsAbstract3DEngine *

connect( mCameraController, &QgsCameraController::cameraChanged, this, &Qgs3DMapScene::onCameraChanged );
connect( mCameraController, &QgsCameraController::viewportChanged, this, &Qgs3DMapScene::onCameraChanged );
connect( mCameraController, &QgsCameraController::navigationModeHotKeyPressed, this, &Qgs3DMapScene::navigationModeHotKeyPressed );

#if 0
// experiments with loading of existing 3D models.
Expand Down Expand Up @@ -233,7 +233,7 @@ Qgs3DMapScene::Qgs3DMapScene( const Qgs3DMapSettings &map, QgsAbstract3DEngine *
onDebugShadowMapSettingsChanged();
onDebugDepthMapSettingsChanged();

onCameraNavigationModeChanged();
mCameraController->setCameraNavigationMode( mMap.cameraNavigationMode() );
onCameraMovementSpeedChanged();
}

Expand Down Expand Up @@ -1060,11 +1060,6 @@ void Qgs3DMapScene::onEyeDomeShadingSettingsChanged()
shadowRenderingFrameGraph->setupEyeDomeLighting( edlEnabled, edlStrength, edlDistance );
}

void Qgs3DMapScene::onCameraNavigationModeChanged()
{
mCameraController->setCameraNavigationMode( mMap.cameraNavigationMode() );
}

void Qgs3DMapScene::onCameraMovementSpeedChanged()
{
mCameraController->setCameraMovementSpeed( mMap.cameraMovementSpeed() );
Expand Down
5 changes: 3 additions & 2 deletions src/3d/qgs3dmapscene.h
Expand Up @@ -23,6 +23,7 @@
#include "qgsfeatureid.h"
#include "qgsshadowrenderingframegraph.h"
#include "qgsray3d.h"
#include "qgscameracontroller.h"

namespace Qt3DRender
{
Expand All @@ -46,7 +47,6 @@ namespace Qt3DExtras
class QgsAbstract3DEngine;
class QgsAbstract3DRenderer;
class QgsMapLayer;
class QgsCameraController;
class Qgs3DMapScenePickHandler;
class Qgs3DMapSettings;
class QgsTerrainEntity;
Expand Down Expand Up @@ -139,6 +139,8 @@ class _3D_EXPORT Qgs3DMapScene : public Qt3DCore::QEntity
void fpsCountChanged( float fpsCount );
//! Emitted when the FPS counter is activated or deactivated
void fpsCounterEnabledChanged( bool fpsCounterEnabled );
//! Emitted when the navigation mode is changed using the hotkey ctrl + ~
void navigationModeHotKeyPressed( QgsCameraController::NavigationMode mode );

public slots:
//! Updates the temporale entities
Expand All @@ -161,7 +163,6 @@ class _3D_EXPORT Qgs3DMapScene : public Qt3DCore::QEntity
void onEyeDomeShadingSettingsChanged();
void onDebugShadowMapSettingsChanged();
void onDebugDepthMapSettingsChanged();
void onCameraNavigationModeChanged();
void onCameraMovementSpeedChanged();

private:
Expand Down
21 changes: 18 additions & 3 deletions src/3d/qgscameracontroller.cpp
Expand Up @@ -430,6 +430,24 @@ void QgsCameraController::onMouseReleased( Qt3DInput::QMouseEvent *mouse )

void QgsCameraController::onKeyPressed( Qt3DInput::QKeyEvent *event )
{
bool hasShift = ( event->modifiers() & Qt::ShiftModifier );
bool hasCtrl = ( event->modifiers() & Qt::ControlModifier );

if ( hasCtrl && event->key() == Qt::Key_QuoteLeft )
{
switch ( mCameraNavigationMode )
{
case NavigationMode::FlyNavigation:
mCameraNavigationMode = NavigationMode::TerrainBasedNavigation;
break;
case NavigationMode::TerrainBasedNavigation:
mCameraNavigationMode = NavigationMode::FlyNavigation;
break;
}
emit navigationModeHotKeyPressed( mCameraNavigationMode );
return;
}

if ( event->key() == Qt::Key_QuoteLeft )
{
if ( mCameraNavigationMode == NavigationMode::FlyNavigation )
Expand Down Expand Up @@ -459,9 +477,6 @@ void QgsCameraController::onKeyPressed( Qt3DInput::QKeyEvent *event )
return;
}

bool hasShift = ( event->modifiers() & Qt::ShiftModifier );
bool hasCtrl = ( event->modifiers() & Qt::ControlModifier );

int tx = 0, ty = 0, tElev = 0;
switch ( event->key() )
{
Expand Down
2 changes: 2 additions & 0 deletions src/3d/qgscameracontroller.h
Expand Up @@ -192,6 +192,8 @@ class _3D_EXPORT QgsCameraController : public Qt3DCore::QEntity
void cameraChanged();
//! Emitted when viewport rectangle has been updated
void viewportChanged();
//! Emitted when the navigation mode is changed using the hotkey ctrl + ~
void navigationModeHotKeyPressed( QgsCameraController::NavigationMode mode );

private slots:
void onPositionChanged( Qt3DInput::QMouseEvent *mouse );
Expand Down
8 changes: 8 additions & 0 deletions src/app/3d/qgs3dmapcanvas.cpp
Expand Up @@ -99,11 +99,13 @@ void Qgs3DMapCanvas::setMap( Qgs3DMapSettings *map )
{
disconnect( mScene, &Qgs3DMapScene::fpsCountChanged, this, &Qgs3DMapCanvas::fpsCountChanged );
disconnect( mScene, &Qgs3DMapScene::fpsCounterEnabledChanged, this, &Qgs3DMapCanvas::fpsCounterEnabledChanged );
disconnect( mScene, &Qgs3DMapScene::navigationModeHotKeyPressed, this, &Qgs3DMapCanvas::onNavigationModeHotKeyPressed );
mScene->deleteLater();
}
mScene = newScene;
connect( mScene, &Qgs3DMapScene::fpsCountChanged, this, &Qgs3DMapCanvas::fpsCountChanged );
connect( mScene, &Qgs3DMapScene::fpsCounterEnabledChanged, this, &Qgs3DMapCanvas::fpsCounterEnabledChanged );
connect( mScene, &Qgs3DMapScene::navigationModeHotKeyPressed, this, &Qgs3DMapCanvas::onNavigationModeHotKeyPressed );

delete mMap;
mMap = map;
Expand Down Expand Up @@ -260,3 +262,9 @@ QSize Qgs3DMapCanvas::windowSize() const
{
return mEngine->size();
}

void Qgs3DMapCanvas::onNavigationModeHotKeyPressed( QgsCameraController::NavigationMode mode )
{
mMap->setCameraNavigationMode( mode );
mScene->cameraController()->setCameraNavigationMode( mode );
}
3 changes: 2 additions & 1 deletion src/app/3d/qgs3dmapcanvas.h
Expand Up @@ -20,6 +20,7 @@
#include <Qt3DRender/QRenderCapture>

#include "qgsrange.h"
#include "qgscameracontroller.h"

namespace Qt3DExtras
{
Expand All @@ -30,7 +31,6 @@ class Qgs3DMapSettings;
class Qgs3DMapScene;
class Qgs3DMapTool;
class QgsWindow3DEngine;
class QgsCameraController;
class QgsPointXY;
class Qgs3DNavigationWidget;
class QgsTemporalController;
Expand Down Expand Up @@ -106,6 +106,7 @@ class Qgs3DMapCanvas : public QWidget
void fpsCounterEnabledChanged( bool enabled );
private slots:
void updateTemporalRange( const QgsDateTimeRange &timeRange );
void onNavigationModeHotKeyPressed( QgsCameraController::NavigationMode mode );

protected:
void resizeEvent( QResizeEvent *ev ) override;
Expand Down
2 changes: 1 addition & 1 deletion src/app/3d/qgs3dmapcanvasdockwidget.cpp
Expand Up @@ -307,7 +307,7 @@ void Qgs3DMapCanvasDockWidget::configure()
QgsGui::instance()->enableAutoGeometryRestore( &dlg );

Qgs3DMapSettings *map = mCanvas->map();
Qgs3DMapConfigWidget *w = new Qgs3DMapConfigWidget( map, mMainCanvas, &dlg );
Qgs3DMapConfigWidget *w = new Qgs3DMapConfigWidget( map, mMainCanvas, mCanvas, &dlg );
QDialogButtonBox *buttons = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel | QDialogButtonBox::Help, &dlg );

auto applyConfig = [ = ]()
Expand Down
4 changes: 3 additions & 1 deletion src/app/3d/qgs3dmapconfigwidget.cpp
Expand Up @@ -36,10 +36,11 @@
#include "qgs3dmapcanvas.h"
#include "qgs3dmapscene.h"

Qgs3DMapConfigWidget::Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas *mainCanvas, QWidget *parent )
Qgs3DMapConfigWidget::Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas *mainCanvas, Qgs3DMapCanvas *mapCanvas3D, QWidget *parent )
: QWidget( parent )
, mMap( map )
, mMainCanvas( mainCanvas )
, m3DMapCanvas( mapCanvas3D )
{
setupUi( this );

Expand Down Expand Up @@ -320,6 +321,7 @@ void Qgs3DMapConfigWidget::apply()
mMap->setFieldOfView( spinCameraFieldOfView->value() );
mMap->setProjectionType( cboCameraProjectionType->currentData().value< Qt3DRender::QCameraLens::ProjectionType >() );
mMap->setCameraNavigationMode( static_cast<QgsCameraController::NavigationMode>( mCameraNavigationMode->currentIndex() ) );
m3DMapCanvas->scene()->cameraController()->setCameraNavigationMode( static_cast<QgsCameraController::NavigationMode>( mCameraNavigationMode->currentIndex() ) );
mMap->setCameraMovementSpeed( mCameraMovementSpeed->value() );
mMap->setTerrainVerticalScale( spinTerrainScale->value() );
mMap->setMapTileResolution( spinMapResolution->value() );
Expand Down
2 changes: 1 addition & 1 deletion src/app/3d/qgs3dmapconfigwidget.h
Expand Up @@ -33,7 +33,7 @@ class Qgs3DMapConfigWidget : public QWidget, private Ui::Map3DConfigWidget
Q_OBJECT
public:
//! construct widget. does not take ownership of the passed map.
explicit Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas *mainCanvas, QWidget *parent = nullptr );
explicit Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas *mainCanvas, Qgs3DMapCanvas *mapCanvas3D, QWidget *parent = nullptr );

~Qgs3DMapConfigWidget() override;

Expand Down

0 comments on commit 5ebab69

Please sign in to comment.