diff --git a/python/3d/auto_additions/qgscameracontroller.py b/python/3d/auto_additions/qgscameracontroller.py deleted file mode 100644 index 63134ccb941..00000000000 --- a/python/3d/auto_additions/qgscameracontroller.py +++ /dev/null @@ -1,3 +0,0 @@ -# The following has been generated automatically from src/3d/qgscameracontroller.h -QgsCameraController.NavigationMode.baseClass = QgsCameraController -QgsCameraController.VerticalAxisInversion.baseClass = QgsCameraController diff --git a/python/3d/auto_generated/qgs3dmapsettings.sip.in b/python/3d/auto_generated/qgs3dmapsettings.sip.in index 68bf7661176..1f1ab4d8b90 100644 --- a/python/3d/auto_generated/qgs3dmapsettings.sip.in +++ b/python/3d/auto_generated/qgs3dmapsettings.sip.in @@ -12,9 +12,6 @@ - - - class Qgs3DMapSettings : QObject, QgsTemporalRangeObject { %Docstring(signature="appended") diff --git a/python/3d/auto_generated/qgscameracontroller.sip.in b/python/3d/auto_generated/qgscameracontroller.sip.in index e942b18da94..0061a133427 100644 --- a/python/3d/auto_generated/qgscameracontroller.sip.in +++ b/python/3d/auto_generated/qgscameracontroller.sip.in @@ -30,24 +30,10 @@ Object that controls camera movement based on user input %End public: - enum NavigationMode - { - TerrainBasedNavigation, - WalkNavigation - }; - - enum VerticalAxisInversion - { - Never, - WhenDragging, - Always, - }; - - public: ~QgsCameraController(); - QgsCameraController::NavigationMode cameraNavigationMode() const; + Qgis::NavigationMode cameraNavigationMode() const; %Docstring Returns the navigation mode used by the camera controller. @@ -68,14 +54,14 @@ Sets the camera movement speed .. versionadded:: 3.18 %End - QgsCameraController::VerticalAxisInversion verticalAxisInversion() const; + Qgis::VerticalAxisInversion verticalAxisInversion() const; %Docstring Returns the vertical axis inversion behavior. .. versionadded:: 3.18 %End - void setVerticalAxisInversion( QgsCameraController::VerticalAxisInversion inversion ); + void setVerticalAxisInversion( Qgis::VerticalAxisInversion inversion ); %Docstring Sets the vertical axis ``inversion`` behavior. @@ -188,7 +174,7 @@ the controller ever receives it. public slots: - void setCameraNavigationMode( QgsCameraController::NavigationMode navigationMode ); + void setCameraNavigationMode( Qgis::NavigationMode navigationMode ); %Docstring Sets the navigation mode used by the camera controller. @@ -211,7 +197,7 @@ Sets the depth buffer image used by the camera controller to calculate world pos Emitted when camera has been updated %End - void navigationModeChanged( QgsCameraController::NavigationMode mode ); + void navigationModeChanged( Qgis::NavigationMode mode ); %Docstring Emitted when the navigation mode is changed using the hotkey ctrl + ~ %End diff --git a/python/core/auto_additions/qgis.py b/python/core/auto_additions/qgis.py index 80847442904..87166555004 100644 --- a/python/core/auto_additions/qgis.py +++ b/python/core/auto_additions/qgis.py @@ -2343,6 +2343,19 @@ Qgis.LightSourceType.__doc__ = 'Light source types for 3D scenes.\n\n.. versiona # -- Qgis.LightSourceType.baseClass = Qgis # monkey patching scoped based enum +Qgis.NavigationMode.TerrainBased.__doc__ = "The default navigation based on the terrain" +Qgis.NavigationMode.Walk.__doc__ = "Uses WASD keys or arrows to navigate in walking (first person) manner" +Qgis.NavigationMode.__doc__ = 'The navigation mode used by 3D cameras.\n\n.. versionadded:: 3.30\n\n' + '* ``TerrainBased``: ' + Qgis.NavigationMode.TerrainBased.__doc__ + '\n' + '* ``Walk``: ' + Qgis.NavigationMode.Walk.__doc__ +# -- +Qgis.NavigationMode.baseClass = Qgis +# monkey patching scoped based enum +Qgis.VerticalAxisInversion.Never.__doc__ = "Never invert vertical axis movements" +Qgis.VerticalAxisInversion.WhenDragging.__doc__ = "Invert vertical axis movements when dragging in first person modes" +Qgis.VerticalAxisInversion.Always.__doc__ = "Always invert vertical axis movements" +Qgis.VerticalAxisInversion.__doc__ = 'Vertical axis inversion options for 3D views.\n\n.. versionadded:: 3.30\n\n' + '* ``Never``: ' + Qgis.VerticalAxisInversion.Never.__doc__ + '\n' + '* ``WhenDragging``: ' + Qgis.VerticalAxisInversion.WhenDragging.__doc__ + '\n' + '* ``Always``: ' + Qgis.VerticalAxisInversion.Always.__doc__ +# -- +Qgis.VerticalAxisInversion.baseClass = Qgis +# monkey patching scoped based enum Qgis.ProfileSurfaceSymbology.Line.__doc__ = "The elevation surface will be rendered using a line symbol" Qgis.ProfileSurfaceSymbology.FillBelow.__doc__ = "The elevation surface will be rendered using a fill symbol below the surface level" Qgis.ProfileSurfaceSymbology.__doc__ = 'Surface symbology type for elevation profile plots.\n\n.. versionadded:: 3.26\n\n' + '* ``Line``: ' + Qgis.ProfileSurfaceSymbology.Line.__doc__ + '\n' + '* ``FillBelow``: ' + Qgis.ProfileSurfaceSymbology.FillBelow.__doc__ diff --git a/python/core/auto_generated/qgis.sip.in b/python/core/auto_generated/qgis.sip.in index 4af2406e205..98b9ee4dfae 100644 --- a/python/core/auto_generated/qgis.sip.in +++ b/python/core/auto_generated/qgis.sip.in @@ -1412,6 +1412,19 @@ The development version Directional, }; + enum class NavigationMode + { + TerrainBased, + Walk + }; + + enum class VerticalAxisInversion + { + Never, + WhenDragging, + Always, + }; + enum class ProfileSurfaceSymbology { Line, diff --git a/src/3d/qgs3dmapscene.cpp b/src/3d/qgs3dmapscene.cpp index 1180d7346e1..f20a46066cf 100644 --- a/src/3d/qgs3dmapscene.cpp +++ b/src/3d/qgs3dmapscene.cpp @@ -65,15 +65,14 @@ #include "qgssourcecache.h" #include "qgsterrainentity_p.h" #include "qgsterraingenerator.h" -#include "qgstessellatedpolygongeometry.h" +#include "qgsdirectionallightsettings.h" #include "qgsvectorlayer.h" #include "qgsvectorlayer3drenderer.h" #include "qgspoint3dbillboardmaterial.h" #include "qgsmaplayertemporalproperties.h" - +#include "qgsmaplayerelevationproperties.h" #include "qgslinematerial_p.h" #include "qgs3dsceneexporter.h" -#include "qgsabstract3drenderer.h" #include "qgs3dmapexportsettings.h" #include "qgsmessageoutput.h" @@ -81,9 +80,7 @@ #include "qgsskyboxsettings.h" #include "qgswindow3dengine.h" -#include "qgspointcloudlayerelevationproperties.h" #include "qgspointcloudlayer.h" -#include "qgspointcloudlayerchunkloader_p.h" std::function< QMap< QString, Qgs3DMapScene * >() > Qgs3DMapScene::sOpenScenesFunction = [] { return QMap< QString, Qgs3DMapScene * >(); }; diff --git a/src/3d/qgs3dmapsettings.cpp b/src/3d/qgs3dmapsettings.cpp index 147d659123f..12cd59b39d7 100644 --- a/src/3d/qgs3dmapsettings.cpp +++ b/src/3d/qgs3dmapsettings.cpp @@ -26,12 +26,15 @@ #include "qgspointcloudlayer3drenderer.h" #include "qgsprojectelevationproperties.h" #include "qgsterrainprovider.h" +#include "qgslightsource.h" +#include "qgssymbollayerutils.h" +#include "qgsrasterlayer.h" +#include "qgspointlightsettings.h" +#include "qgsdirectionallightsettings.h" #include #include -#include "qgssymbollayerutils.h" -#include "qgsrasterlayer.h" Qgs3DMapSettings::Qgs3DMapSettings() : QObject( nullptr ) @@ -151,9 +154,9 @@ void Qgs3DMapSettings::readXml( const QDomElement &elem, const QgsReadWriteConte mProjectionType = static_cast< Qt3DRender::QCameraLens::ProjectionType >( elemCamera.attribute( QStringLiteral( "projection-type" ), QStringLiteral( "1" ) ).toInt() ); QString cameraNavigationMode = elemCamera.attribute( QStringLiteral( "camera-navigation-mode" ), QStringLiteral( "basic-navigation" ) ); if ( cameraNavigationMode == QLatin1String( "terrain-based-navigation" ) ) - mCameraNavigationMode = QgsCameraController::NavigationMode::TerrainBasedNavigation; + mCameraNavigationMode = Qgis::NavigationMode::TerrainBased; else if ( cameraNavigationMode == QLatin1String( "walk-navigation" ) ) - mCameraNavigationMode = QgsCameraController::NavigationMode::WalkNavigation; + mCameraNavigationMode = Qgis::NavigationMode::Walk; mCameraMovementSpeed = elemCamera.attribute( QStringLiteral( "camera-movement-speed" ), QStringLiteral( "5.0" ) ).toDouble(); } @@ -368,10 +371,10 @@ QDomElement Qgs3DMapSettings::writeXml( QDomDocument &doc, const QgsReadWriteCon elemCamera.setAttribute( QStringLiteral( "projection-type" ), static_cast< int >( mProjectionType ) ); switch ( mCameraNavigationMode ) { - case QgsCameraController::TerrainBasedNavigation: + case Qgis::NavigationMode::TerrainBased: elemCamera.setAttribute( QStringLiteral( "camera-navigation-mode" ), QStringLiteral( "terrain-based-navigation" ) ); break; - case QgsCameraController::WalkNavigation: + case Qgis::NavigationMode::Walk: elemCamera.setAttribute( QStringLiteral( "camera-navigation-mode" ), QStringLiteral( "walk-navigation" ) ); break; } @@ -903,7 +906,7 @@ void Qgs3DMapSettings::setProjectionType( const Qt3DRender::QCameraLens::Project emit projectionTypeChanged(); } -void Qgs3DMapSettings::setCameraNavigationMode( QgsCameraController::NavigationMode navigationMode ) +void Qgs3DMapSettings::setCameraNavigationMode( Qgis::NavigationMode navigationMode ) { if ( mCameraNavigationMode == navigationMode ) return; diff --git a/src/3d/qgs3dmapsettings.h b/src/3d/qgs3dmapsettings.h index c7a7f925e40..7c3486e7cbd 100644 --- a/src/3d/qgs3dmapsettings.h +++ b/src/3d/qgs3dmapsettings.h @@ -25,25 +25,19 @@ #include "qgscoordinatereferencesystem.h" #include "qgsmaplayerref.h" -#include "qgsmesh3dsymbol.h" #include "qgsphongmaterialsettings.h" -#include "qgspointlightsettings.h" -#include "qgsdirectionallightsettings.h" #include "qgsterraingenerator.h" #include "qgsvector3d.h" #include "qgs3daxissettings.h" #include "qgsskyboxsettings.h" #include "qgsshadowsettings.h" -#include "qgscameracontroller.h" #include "qgstemporalrangeobject.h" #include "qgsambientocclusionsettings.h" class QgsMapLayer; class QgsRasterLayer; - +class QgsLightSource; class QgsAbstract3DRenderer; - - class QgsReadWriteContext; class QgsProject; @@ -500,13 +494,13 @@ class _3D_EXPORT Qgs3DMapSettings : public QObject, public QgsTemporalRangeObjec * Returns the navigation mode used by the camera * \since QGIS 3.18 */ - QgsCameraController::NavigationMode cameraNavigationMode() const { return mCameraNavigationMode; } + Qgis::NavigationMode cameraNavigationMode() const { return mCameraNavigationMode; } /** * Sets the navigation mode for the camera * \since QGIS 3.18 */ - void setCameraNavigationMode( QgsCameraController::NavigationMode navigationMode ); + void setCameraNavigationMode( Qgis::NavigationMode navigationMode ); #endif /** @@ -926,7 +920,7 @@ class _3D_EXPORT Qgs3DMapSettings : public QObject, public QgsTemporalRangeObjec QList< QgsLightSource * > mLightSources; //!< List of light sources in the scene (owned by the settings) float mFieldOfView = 45.0f; // mLayers; //!< Layers to be rendered QList mRenderers; //!< Extra stuff to render as 3D object diff --git a/src/3d/qgs3dutils.cpp b/src/3d/qgs3dutils.cpp index 2f424b21b56..e14c129faa1 100644 --- a/src/3d/qgs3dutils.cpp +++ b/src/3d/qgs3dutils.cpp @@ -24,19 +24,11 @@ #include "qgsvectorlayer.h" #include "qgsexpressioncontextutils.h" #include "qgsfeedback.h" -#include "qgsexpression.h" -#include "qgsexpressionutils.h" #include "qgsoffscreen3dengine.h" - #include "qgs3dmapscene.h" #include "qgsabstract3dengine.h" #include "qgsterraingenerator.h" #include "qgscameracontroller.h" - -#include "qgsline3dsymbol.h" -#include "qgspoint3dsymbol.h" -#include "qgspolygon3dsymbol.h" - #include "qgspointcloudrenderer.h" #include "qgspointcloud3dsymbol.h" #include "qgspointcloudlayer3drenderer.h" diff --git a/src/3d/qgs3dutils.h b/src/3d/qgs3dutils.h index 7523aba8633..7dfd6d28a87 100644 --- a/src/3d/qgs3dutils.h +++ b/src/3d/qgs3dutils.h @@ -16,8 +16,6 @@ #ifndef QGS3DUTILS_H #define QGS3DUTILS_H -#include "qgis_sip.h" - class QgsLineString; class QgsPolygon; class QgsFeedback; diff --git a/src/3d/qgscameracontroller.cpp b/src/3d/qgscameracontroller.cpp index 0c8c658a15a..6e73d9cfe4e 100644 --- a/src/3d/qgscameracontroller.cpp +++ b/src/3d/qgscameracontroller.cpp @@ -14,13 +14,12 @@ ***************************************************************************/ #include "qgscameracontroller.h" -#include "qgsterrainentity_p.h" #include "qgsvector3d.h" -#include "qgs3dutils.h" #include "qgswindow3dengine.h" #include "qgs3dmapscene.h" - +#include "qgsterrainentity_p.h" #include "qgis.h" +#include "qgs3dutils.h" #include #include @@ -76,7 +75,7 @@ QWindow *QgsCameraController::window() const return windowEngine ? windowEngine->window() : nullptr; } -void QgsCameraController::setCameraNavigationMode( QgsCameraController::NavigationMode navigationMode ) +void QgsCameraController::setCameraNavigationMode( Qgis::NavigationMode navigationMode ) { if ( navigationMode == mCameraNavigationMode ) return; @@ -95,7 +94,7 @@ void QgsCameraController::setCameraMovementSpeed( double movementSpeed ) emit cameraMovementSpeedChanged( mCameraMovementSpeed ); } -void QgsCameraController::setVerticalAxisInversion( QgsCameraController::VerticalAxisInversion inversion ) +void QgsCameraController::setVerticalAxisInversion( Qgis::VerticalAxisInversion inversion ) { mVerticalAxisInversion = inversion; } @@ -272,11 +271,11 @@ void QgsCameraController::onPositionChanged( Qt3DInput::QMouseEvent *mouse ) { switch ( mCameraNavigationMode ) { - case TerrainBasedNavigation: + case Qgis::NavigationMode::TerrainBased: onPositionChangedTerrainNavigation( mouse ); break; - case WalkNavigation: + case Qgis::NavigationMode::Walk: onPositionChangedFlyNavigation( mouse ); break; } @@ -580,14 +579,14 @@ void QgsCameraController::onWheel( Qt3DInput::QWheelEvent *wheel ) { switch ( mCameraNavigationMode ) { - case QgsCameraController::WalkNavigation: + case Qgis::NavigationMode::Walk: { const float scaling = ( ( wheel->modifiers() & Qt::ControlModifier ) != 0 ? 0.1f : 1.0f ) / 1000.f; setCameraMovementSpeed( mCameraMovementSpeed + mCameraMovementSpeed * scaling * wheel->angleDelta().y() ); break; } - case TerrainBasedNavigation: + case Qgis::NavigationMode::TerrainBased: { const float scaling = ( ( wheel->modifiers() & Qt::ControlModifier ) != 0 ? 0.5f : 5.f ); @@ -689,11 +688,11 @@ void QgsCameraController::onKeyPressed( Qt3DInput::QKeyEvent *event ) // switch navigation mode switch ( mCameraNavigationMode ) { - case NavigationMode::WalkNavigation: - setCameraNavigationMode( NavigationMode::TerrainBasedNavigation ); + case Qgis::NavigationMode::Walk: + setCameraNavigationMode( Qgis::NavigationMode::TerrainBased ); break; - case NavigationMode::TerrainBasedNavigation: - setCameraNavigationMode( NavigationMode::WalkNavigation ); + case Qgis::NavigationMode::TerrainBased: + setCameraNavigationMode( Qgis::NavigationMode::Walk ); break; } return; @@ -701,13 +700,13 @@ void QgsCameraController::onKeyPressed( Qt3DInput::QKeyEvent *event ) switch ( mCameraNavigationMode ) { - case WalkNavigation: + case Qgis::NavigationMode::Walk: { onKeyPressedFlyNavigation( event ); break; } - case TerrainBasedNavigation: + case Qgis::NavigationMode::TerrainBased: { onKeyPressedTerrainNavigation( event ); break; @@ -914,12 +913,12 @@ void QgsCameraController::onPositionChangedFlyNavigation( Qt3DInput::QMouseEvent float diffPitch = -0.2f * dy; switch ( mVerticalAxisInversion ) { - case Always: + case Qgis::VerticalAxisInversion::Always: diffPitch *= -1; break; - case WhenDragging: - case Never: + case Qgis::VerticalAxisInversion::WhenDragging: + case Qgis::VerticalAxisInversion::Never: break; } @@ -931,12 +930,12 @@ void QgsCameraController::onPositionChangedFlyNavigation( Qt3DInput::QMouseEvent float diffPitch = -0.2f * dy; switch ( mVerticalAxisInversion ) { - case Always: - case WhenDragging: + case Qgis::VerticalAxisInversion::Always: + case Qgis::VerticalAxisInversion::WhenDragging: diffPitch *= -1; break; - case Never: + case Qgis::VerticalAxisInversion::Never: break; } const float diffYaw = - 0.2f * dx; @@ -1011,7 +1010,7 @@ bool QgsCameraController::willHandleKeyEvent( QKeyEvent *event ) switch ( mCameraNavigationMode ) { - case WalkNavigation: + case Qgis::NavigationMode::Walk: { switch ( event->key() ) { @@ -1040,7 +1039,7 @@ bool QgsCameraController::willHandleKeyEvent( QKeyEvent *event ) break; } - case TerrainBasedNavigation: + case Qgis::NavigationMode::TerrainBased: { switch ( event->key() ) { diff --git a/src/3d/qgscameracontroller.h b/src/3d/qgscameracontroller.h index fc0c14e820a..b8dcb8f570a 100644 --- a/src/3d/qgscameracontroller.h +++ b/src/3d/qgscameracontroller.h @@ -66,24 +66,6 @@ class _3D_EXPORT QgsCameraController : public QObject Q_OBJECT public: - //! The navigation mode used by the camera - enum NavigationMode - { - TerrainBasedNavigation, //!< The default navigation based on the terrain - WalkNavigation //!< Uses WASD keys or arrows to navigate in walking (first person) manner - }; - Q_ENUM( NavigationMode ) - - //! Vertical axis inversion options - enum VerticalAxisInversion - { - Never, //!< Never invert vertical axis movements - WhenDragging, //!< Invert vertical axis movements when dragging in first person modes - Always, //!< Always invert vertical axis movements - }; - Q_ENUM( VerticalAxisInversion ) - - public: //! Constructs the camera controller with optional parent node that will take ownership QgsCameraController( Qgs3DMapScene *scene ) SIP_SKIP; ~QgsCameraController() override; @@ -101,7 +83,7 @@ class _3D_EXPORT QgsCameraController : public QObject * Returns the navigation mode used by the camera controller. * \since QGIS 3.18 */ - QgsCameraController::NavigationMode cameraNavigationMode() const { return mCameraNavigationMode; } + Qgis::NavigationMode cameraNavigationMode() const { return mCameraNavigationMode; } /** * Returns the camera movement speed @@ -119,13 +101,13 @@ class _3D_EXPORT QgsCameraController : public QObject * Returns the vertical axis inversion behavior. * \since QGIS 3.18 */ - QgsCameraController::VerticalAxisInversion verticalAxisInversion() const { return mVerticalAxisInversion; } + Qgis::VerticalAxisInversion verticalAxisInversion() const { return mVerticalAxisInversion; } /** * Sets the vertical axis \a inversion behavior. * \since QGIS 3.18 */ - void setVerticalAxisInversion( QgsCameraController::VerticalAxisInversion inversion ); + void setVerticalAxisInversion( Qgis::VerticalAxisInversion inversion ); //! Called internally from 3D scene when a new frame is generated. Updates camera according to keyboard/mouse input void frameTriggered( float dt ); @@ -209,7 +191,7 @@ class _3D_EXPORT QgsCameraController : public QObject * Sets the navigation mode used by the camera controller. * \since QGIS 3.18 */ - void setCameraNavigationMode( QgsCameraController::NavigationMode navigationMode ); + void setCameraNavigationMode( Qgis::NavigationMode navigationMode ); /** * Sets the depth buffer image used by the camera controller to calculate world position from a pixel's coordinates and depth @@ -234,7 +216,7 @@ class _3D_EXPORT QgsCameraController : public QObject void cameraChanged(); //! Emitted when the navigation mode is changed using the hotkey ctrl + ~ - void navigationModeChanged( QgsCameraController::NavigationMode mode ); + void navigationModeChanged( Qgis::NavigationMode mode ); /** * Emitted whenever the camera movement speed is changed by the controller. @@ -323,8 +305,8 @@ class _3D_EXPORT QgsCameraController : public QObject Qt3DInput::QMouseHandler *mMouseHandler = nullptr; Qt3DInput::QKeyboardHandler *mKeyboardHandler = nullptr; - NavigationMode mCameraNavigationMode = NavigationMode::TerrainBasedNavigation; - VerticalAxisInversion mVerticalAxisInversion = WhenDragging; + Qgis::NavigationMode mCameraNavigationMode = Qgis::NavigationMode::TerrainBased; + Qgis::VerticalAxisInversion mVerticalAxisInversion = Qgis::VerticalAxisInversion::WhenDragging; double mCameraMovementSpeed = 5.0; QSet< int > mDepressedKeys; diff --git a/src/3d/symbols/qgspoint3dbillboardmaterial.cpp b/src/3d/symbols/qgspoint3dbillboardmaterial.cpp index 36d61d52f4f..40933977ca5 100644 --- a/src/3d/symbols/qgspoint3dbillboardmaterial.cpp +++ b/src/3d/symbols/qgspoint3dbillboardmaterial.cpp @@ -81,6 +81,8 @@ QgsPoint3DBillboardMaterial::QgsPoint3DBillboardMaterial() setEffect( effect ); } +QgsPoint3DBillboardMaterial::~QgsPoint3DBillboardMaterial() = default; + void QgsPoint3DBillboardMaterial::setSize( const QSizeF size ) { mSize->setValue( size ); diff --git a/src/3d/symbols/qgspoint3dbillboardmaterial.h b/src/3d/symbols/qgspoint3dbillboardmaterial.h index 15840274487..b9230c91cad 100644 --- a/src/3d/symbols/qgspoint3dbillboardmaterial.h +++ b/src/3d/symbols/qgspoint3dbillboardmaterial.h @@ -24,6 +24,8 @@ #define SIP_NO_FILE +class QgsMarkerSymbol; + /** * \ingroup 3d * \brief Material of the billboard rendering for points in 3D map view. @@ -38,6 +40,7 @@ class QgsPoint3DBillboardMaterial : public Qt3DRender::QMaterial public: QgsPoint3DBillboardMaterial(); + ~QgsPoint3DBillboardMaterial() override; //! Set the billboard size. void setSize( const QSizeF size ); diff --git a/src/app/3d/qgs3dmapcanvas.cpp b/src/app/3d/qgs3dmapcanvas.cpp index 1311bca17ae..3be7fd7875c 100644 --- a/src/app/3d/qgs3dmapcanvas.cpp +++ b/src/app/3d/qgs3dmapcanvas.cpp @@ -21,23 +21,14 @@ #include #include - #include "qgscameracontroller.h" #include "qgs3dmapsettings.h" #include "qgs3dmapscene.h" #include "qgs3dmaptool.h" #include "qgswindow3dengine.h" #include "qgs3dnavigationwidget.h" -#include "qgsproject.h" -#include "qgsprojectviewsettings.h" #include "qgssettings.h" #include "qgstemporalcontroller.h" -#include "qgsflatterraingenerator.h" -#include "qgsonlineterraingenerator.h" -#include "qgsray3d.h" -#include "qgs3dutils.h" -#include "qgsoffscreen3dengine.h" -#include "qgscoordinatetransform.h" Qgs3DMapCanvas::Qgs3DMapCanvas( QWidget *parent ) : QWidget( parent ) @@ -296,7 +287,7 @@ QSize Qgs3DMapCanvas::windowSize() const return mEngine->size(); } -void Qgs3DMapCanvas::onNavigationModeChanged( QgsCameraController::NavigationMode mode ) +void Qgs3DMapCanvas::onNavigationModeChanged( Qgis::NavigationMode mode ) { mMap->setCameraNavigationMode( mode ); } diff --git a/src/app/3d/qgs3dmapcanvas.h b/src/app/3d/qgs3dmapcanvas.h index 1e933ac1181..cd116b62f85 100644 --- a/src/app/3d/qgs3dmapcanvas.h +++ b/src/app/3d/qgs3dmapcanvas.h @@ -149,7 +149,7 @@ class Qgs3DMapCanvas : public QWidget private slots: void updateTemporalRange( const QgsDateTimeRange &timeRange ); - void onNavigationModeChanged( QgsCameraController::NavigationMode mode ); + void onNavigationModeChanged( Qgis::NavigationMode mode ); protected: void resizeEvent( QResizeEvent *ev ) override; diff --git a/src/app/3d/qgs3dmapconfigwidget.cpp b/src/app/3d/qgs3dmapconfigwidget.cpp index 0d9bef6e7a0..41d2d0ae73d 100644 --- a/src/app/3d/qgs3dmapconfigwidget.cpp +++ b/src/app/3d/qgs3dmapconfigwidget.cpp @@ -21,22 +21,17 @@ #include "qgsonlineterraingenerator.h" #include "qgsmeshterraingenerator.h" #include "qgs3dutils.h" - #include "qgsguiutils.h" #include "qgsmapcanvas.h" -#include "qgsmapthemecollection.h" #include "qgsrasterlayer.h" #include "qgsmeshlayer.h" #include "qgsproject.h" -#include "qgsprojectviewsettings.h" #include "qgsmesh3dsymbolwidget.h" #include "qgssettings.h" #include "qgsskyboxrenderingsettingswidget.h" #include "qgsshadowrenderingsettingswidget.h" #include "qgsambientocclusionsettingswidget.h" #include "qgs3dmapcanvas.h" -#include "qgs3dmapscene.h" -#include "qgs3daxis.h" Qgs3DMapConfigWidget::Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas *mainCanvas, Qgs3DMapCanvas *mapCanvas3D, QWidget *parent ) : QWidget( parent ) @@ -54,8 +49,8 @@ Qgs3DMapConfigWidget::Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas const int iconSize = QgsGuiUtils::scaleIconSize( 20 ); m3DOptionsListWidget->setIconSize( QSize( iconSize, iconSize ) ) ; - mCameraNavigationModeCombo->addItem( tr( "Terrain Based" ), QgsCameraController::TerrainBasedNavigation ); - mCameraNavigationModeCombo->addItem( tr( "Walk Mode (First Person)" ), QgsCameraController::WalkNavigation ); + mCameraNavigationModeCombo->addItem( tr( "Terrain Based" ), QVariant::fromValue( Qgis::NavigationMode::TerrainBased ) ); + mCameraNavigationModeCombo->addItem( tr( "Walk Mode (First Person)" ), QVariant::fromValue( Qgis::NavigationMode::Walk ) ); // get rid of annoying outer focus rect on Mac m3DOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect, false ); @@ -143,7 +138,7 @@ Qgs3DMapConfigWidget::Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas spinCameraFieldOfView->setValue( mMap->fieldOfView() ); cboCameraProjectionType->setCurrentIndex( cboCameraProjectionType->findData( mMap->projectionType() ) ); - mCameraNavigationModeCombo->setCurrentIndex( mCameraNavigationModeCombo->findData( mMap->cameraNavigationMode() ) ); + mCameraNavigationModeCombo->setCurrentIndex( mCameraNavigationModeCombo->findData( QVariant::fromValue( mMap->cameraNavigationMode() ) ) ); mCameraMovementSpeed->setValue( mMap->cameraMovementSpeed() ); spinTerrainScale->setValue( mMap->terrainVerticalScale() ); spinMapResolution->setValue( mMap->mapTileResolution() ); @@ -345,7 +340,7 @@ void Qgs3DMapConfigWidget::apply() mMap->setFieldOfView( spinCameraFieldOfView->value() ); mMap->setProjectionType( cboCameraProjectionType->currentData().value< Qt3DRender::QCameraLens::ProjectionType >() ); - mMap->setCameraNavigationMode( static_cast( mCameraNavigationModeCombo->currentData().toInt() ) ); + mMap->setCameraNavigationMode( mCameraNavigationModeCombo->currentData().value< Qgis::NavigationMode>() ); mMap->setCameraMovementSpeed( mCameraMovementSpeed->value() ); mMap->setTerrainVerticalScale( spinTerrainScale->value() ); mMap->setMapTileResolution( spinMapResolution->value() ); diff --git a/src/app/3d/qgs3doptions.cpp b/src/app/3d/qgs3doptions.cpp index 269f2c088a3..7806bef792a 100644 --- a/src/app/3d/qgs3doptions.cpp +++ b/src/app/3d/qgs3doptions.cpp @@ -17,8 +17,6 @@ #include "qgsapplication.h" #include "qgssettings.h" #include "qgis.h" -#include "qgsgui.h" -#include "qgscameracontroller.h" #include // @@ -32,25 +30,25 @@ Qgs3DOptionsWidget::Qgs3DOptionsWidget( QWidget *parent ) layout()->setContentsMargins( 0, 0, 0, 0 ); - mCameraNavigationModeCombo->addItem( tr( "Terrain Based" ), QgsCameraController::TerrainBasedNavigation ); - mCameraNavigationModeCombo->addItem( tr( "Walk Mode (First Person)" ), QgsCameraController::WalkNavigation ); + mCameraNavigationModeCombo->addItem( tr( "Terrain Based" ), QVariant::fromValue( Qgis::NavigationMode::TerrainBased ) ); + mCameraNavigationModeCombo->addItem( tr( "Walk Mode (First Person)" ), QVariant::fromValue( Qgis::NavigationMode::Walk ) ); cboCameraProjectionType->addItem( tr( "Perspective Projection" ), Qt3DRender::QCameraLens::PerspectiveProjection ); cboCameraProjectionType->addItem( tr( "Orthogonal Projection" ), Qt3DRender::QCameraLens::OrthographicProjection ); - mInvertVerticalAxisCombo->addItem( tr( "Never" ), QgsCameraController::Never ); - mInvertVerticalAxisCombo->addItem( tr( "Only When Dragging" ), QgsCameraController::WhenDragging ); - mInvertVerticalAxisCombo->addItem( tr( "Always" ), QgsCameraController::Always ); + mInvertVerticalAxisCombo->addItem( tr( "Never" ), QVariant::fromValue( Qgis::VerticalAxisInversion::Never ) ); + mInvertVerticalAxisCombo->addItem( tr( "Only When Dragging" ), QVariant::fromValue( Qgis::VerticalAxisInversion::WhenDragging ) ); + mInvertVerticalAxisCombo->addItem( tr( "Always" ), QVariant::fromValue( Qgis::VerticalAxisInversion::Always ) ); mCameraMovementSpeed->setClearValue( 4 ); spinCameraFieldOfView->setClearValue( 45.0 ); QgsSettings settings; - const QgsCameraController::NavigationMode defaultNavMode = settings.enumValue( QStringLiteral( "map3d/defaultNavigation" ), QgsCameraController::TerrainBasedNavigation, QgsSettings::App ); - mCameraNavigationModeCombo->setCurrentIndex( mCameraNavigationModeCombo->findData( static_cast< int >( defaultNavMode ) ) ); + const Qgis::NavigationMode defaultNavMode = settings.enumValue( QStringLiteral( "map3d/defaultNavigation" ), Qgis::NavigationMode::TerrainBased, QgsSettings::App ); + mCameraNavigationModeCombo->setCurrentIndex( mCameraNavigationModeCombo->findData( QVariant::fromValue( defaultNavMode ) ) ); - const QgsCameraController::VerticalAxisInversion axisInversion = settings.enumValue( QStringLiteral( "map3d/axisInversion" ), QgsCameraController::WhenDragging, QgsSettings::App ); - mInvertVerticalAxisCombo->setCurrentIndex( mInvertVerticalAxisCombo->findData( static_cast< int >( axisInversion ) ) ); + const Qgis::VerticalAxisInversion axisInversion = settings.enumValue( QStringLiteral( "map3d/axisInversion" ), Qgis::VerticalAxisInversion::WhenDragging, QgsSettings::App ); + mInvertVerticalAxisCombo->setCurrentIndex( mInvertVerticalAxisCombo->findData( QVariant::fromValue( axisInversion ) ) ); const Qt3DRender::QCameraLens::ProjectionType defaultProjection = settings.enumValue( QStringLiteral( "map3d/defaultProjection" ), Qt3DRender::QCameraLens::PerspectiveProjection, QgsSettings::App ); cboCameraProjectionType->setCurrentIndex( cboCameraProjectionType->findData( static_cast< int >( defaultProjection ) ) ); @@ -62,8 +60,8 @@ Qgs3DOptionsWidget::Qgs3DOptionsWidget( QWidget *parent ) void Qgs3DOptionsWidget::apply() { QgsSettings settings; - settings.setValue( QStringLiteral( "map3d/defaultNavigation" ), static_cast< QgsCameraController::NavigationMode >( mCameraNavigationModeCombo->currentData().toInt() ), QgsSettings::App ); - settings.setValue( QStringLiteral( "map3d/axisInversion" ), static_cast< QgsCameraController::VerticalAxisInversion >( mInvertVerticalAxisCombo->currentData().toInt() ), QgsSettings::App ); + settings.setEnumValue( QStringLiteral( "map3d/defaultNavigation" ), mCameraNavigationModeCombo->currentData().value< Qgis::NavigationMode >(), QgsSettings::App ); + settings.setEnumValue( QStringLiteral( "map3d/axisInversion" ), mInvertVerticalAxisCombo->currentData().value< Qgis::VerticalAxisInversion >(), QgsSettings::App ); settings.setValue( QStringLiteral( "map3d/defaultProjection" ), static_cast< Qt3DRender::QCameraLens::ProjectionType >( cboCameraProjectionType->currentData().toInt() ), QgsSettings::App ); settings.setValue( QStringLiteral( "map3d/defaultMovementSpeed" ), mCameraMovementSpeed->value(), QgsSettings::App ); settings.setValue( QStringLiteral( "map3d/defaultFieldOfView" ), spinCameraFieldOfView->value(), QgsSettings::App ); diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 268f68e695e..ea03bdb3ba6 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -149,6 +149,7 @@ #include "qgsmapviewsmanager.h" #include "qgs3dmapcanvaswidget.h" #include "qgs3dmapscene.h" +#include "qgsdirectionallightsettings.h" #endif #ifdef HAVE_GEOREFERENCER @@ -13170,7 +13171,7 @@ void QgisApp::new3DMapCanvas() map->setLayers( mMapCanvas->layers( true ) ); map->setTemporalRange( mMapCanvas->temporalRange() ); - const QgsCameraController::NavigationMode defaultNavMode = settings.enumValue( QStringLiteral( "map3d/defaultNavigation" ), QgsCameraController::TerrainBasedNavigation, QgsSettings::App ); + const Qgis::NavigationMode defaultNavMode = settings.enumValue( QStringLiteral( "map3d/defaultNavigation" ), Qgis::NavigationMode::TerrainBased, QgsSettings::App ); map->setCameraNavigationMode( defaultNavMode ); map->setCameraMovementSpeed( settings.value( QStringLiteral( "map3d/defaultMovementSpeed" ), 5, QgsSettings::App ).toDouble() ); @@ -13200,7 +13201,7 @@ void QgisApp::new3DMapCanvas() float dist = static_cast< float >( std::max( extent.width(), extent.height() ) ); canvasWidget->mapCanvas3D()->setViewFromTop( mMapCanvas->extent().center(), dist, static_cast< float >( mMapCanvas->rotation() ) ); - const QgsCameraController::VerticalAxisInversion axisInversion = settings.enumValue( QStringLiteral( "map3d/axisInversion" ), QgsCameraController::WhenDragging, QgsSettings::App ); + const Qgis::VerticalAxisInversion axisInversion = settings.enumValue( QStringLiteral( "map3d/axisInversion" ), Qgis::VerticalAxisInversion::WhenDragging, QgsSettings::App ); if ( canvasWidget->mapCanvas3D()->cameraController() ) canvasWidget->mapCanvas3D()->cameraController()->setVerticalAxisInversion( axisInversion ); diff --git a/src/core/qgis.h b/src/core/qgis.h index 240cc5e6365..da4b25ebad0 100644 --- a/src/core/qgis.h +++ b/src/core/qgis.h @@ -2384,6 +2384,31 @@ class CORE_EXPORT Qgis }; Q_ENUM( LightSourceType ) + /** + * The navigation mode used by 3D cameras. + * + * \since QGIS 3.30 + */ + enum class NavigationMode : int + { + TerrainBased, //!< The default navigation based on the terrain + Walk //!< Uses WASD keys or arrows to navigate in walking (first person) manner + }; + Q_ENUM( NavigationMode ) + + /** + * Vertical axis inversion options for 3D views. + * + * \since QGIS 3.30 + */ + enum class VerticalAxisInversion : int + { + Never, //!< Never invert vertical axis movements + WhenDragging, //!< Invert vertical axis movements when dragging in first person modes + Always, //!< Always invert vertical axis movements + }; + Q_ENUM( VerticalAxisInversion ) + /** * Surface symbology type for elevation profile plots. *