QGIS API Documentation  3.27.0-Master (e113457133)
qgs3dmapsettings.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgs3dmapsettings.h
3  --------------------------------------
4  Date : July 2017
5  Copyright : (C) 2017 by Martin Dobias
6  Email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #ifndef QGS3DMAPSETTINGS_H
17 #define QGS3DMAPSETTINGS_H
18 
19 #include "qgis_3d.h"
20 
21 #include <memory>
22 #include <QColor>
23 #include <QMatrix4x4>
24 #include <Qt3DRender/QCamera>
25 
27 #include "qgsmaplayerref.h"
28 #include "qgsmesh3dsymbol.h"
30 #include "qgspointlightsettings.h"
32 #include "qgsterraingenerator.h"
33 #include "qgsvector3d.h"
34 #include "qgs3daxissettings.h"
35 #include "qgsskyboxsettings.h"
36 #include "qgsshadowsettings.h"
37 #include "qgscameracontroller.h"
38 #include "qgstemporalrangeobject.h"
39 
40 class QgsMapLayer;
41 class QgsRasterLayer;
42 
44 
45 
47 class QgsProject;
48 
49 class QDomElement;
50 
57 class _3D_EXPORT Qgs3DMapSettings : public QObject, public QgsTemporalRangeObject
58 {
59  Q_OBJECT
60  public:
64  Qgs3DMapSettings( const Qgs3DMapSettings &other );
65  ~Qgs3DMapSettings() override;
66 
68 
70  void readXml( const QDomElement &elem, const QgsReadWriteContext &context );
72  QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const;
74  void resolveReferences( const QgsProject &project );
75 
87  void setOrigin( const QgsVector3D &origin ) { mOrigin = origin; }
89  QgsVector3D origin() const { return mOrigin; }
90 
92  QgsVector3D mapToWorldCoordinates( const QgsVector3D &mapCoords ) const;
94  QgsVector3D worldToMapCoordinates( const QgsVector3D &worldCoords ) const;
95 
97  void setCrs( const QgsCoordinateReferenceSystem &crs );
99  QgsCoordinateReferenceSystem crs() const { return mCrs; }
100 
108  QgsCoordinateTransformContext transformContext() const;
109 
117  void setTransformContext( const QgsCoordinateTransformContext &context );
118 
126  const QgsPathResolver &pathResolver() const { return mPathResolver; }
127 
135  void setPathResolver( const QgsPathResolver &resolver ) { mPathResolver = resolver; }
136 
143  QgsMapThemeCollection *mapThemeCollection() const { return mMapThemes; }
144 
150  void setMapThemeCollection( QgsMapThemeCollection *mapThemes ) { mMapThemes = mapThemes; }
151 
153  void setBackgroundColor( const QColor &color );
155  QColor backgroundColor() const;
156 
158  void setSelectionColor( const QColor &color );
160  QColor selectionColor() const;
161 
170  void setLayers( const QList<QgsMapLayer *> &layers );
171 
180  QList<QgsMapLayer *> layers() const;
181 
182  //
183  // terrain related config
184  //
185 
191  void configureTerrainFromProject( QgsProjectElevationProperties *properties, const QgsRectangle &fullExtent ) SIP_SKIP;
192 
197  void setTerrainVerticalScale( double zScale );
199  double terrainVerticalScale() const;
200 
205  void setMapTileResolution( int res );
206 
211  int mapTileResolution() const;
212 
217  void setMaxTerrainScreenError( float error );
218 
226  float maxTerrainScreenError() const;
227 
232  void setMaxTerrainGroundError( float error );
233 
240  float maxTerrainGroundError() const;
241 
247  void setTerrainElevationOffset( float offset );
248 
252  float terrainElevationOffset() const { return mTerrainElevationOffset; }
253 
265  void setTerrainGenerator( QgsTerrainGenerator *gen SIP_TRANSFER ) SIP_SKIP;
266 
278  {
279  return mTerrainGenerator.get();
280  }
281 
287  void setTerrainShadingEnabled( bool enabled );
288 
295  bool isTerrainShadingEnabled() const { return mTerrainShadingEnabled; }
296 
302  void setTerrainShadingMaterial( const QgsPhongMaterialSettings &material );
303 
309  QgsPhongMaterialSettings terrainShadingMaterial() const { return mTerrainShadingMaterial; }
310 
316  void setTerrainMapTheme( const QString &theme );
317 
324  QString terrainMapTheme() const { return mTerrainMapTheme; }
325 
326  //
327  // misc configuration
328  //
329 
331  void setRenderers( const QList<QgsAbstract3DRenderer *> &renderers SIP_TRANSFER );
333  QList<QgsAbstract3DRenderer *> renderers() const { return mRenderers; }
334 
336  void setShowTerrainBoundingBoxes( bool enabled );
338  bool showTerrainBoundingBoxes() const { return mShowTerrainBoundingBoxes; }
340  void setShowTerrainTilesInfo( bool enabled );
342  bool showTerrainTilesInfo() const { return mShowTerrainTileInfo; }
343 
348  void setShowCameraViewCenter( bool enabled );
349 
354  bool showCameraViewCenter() const { return mShowCameraViewCenter; }
355 
360  void setShowCameraRotationCenter( bool enabled );
361 
366  bool showCameraRotationCenter() const { return mShowCameraRotationCenter; }
367 
372  void setShowLightSourceOrigins( bool enabled );
373 
378  bool showLightSourceOrigins() const { return mShowLightSources; }
379 
381  void setShowLabels( bool enabled );
383  bool showLabels() const { return mShowLabels; }
384 
390  void setEyeDomeLightingEnabled( bool enabled );
392  bool eyeDomeLightingEnabled() const { return mEyeDomeLightingEnabled; }
393 
399  void setEyeDomeLightingStrength( double strength );
401  double eyeDomeLightingStrength() const { return mEyeDomeLightingStrength; }
402 
408  void setEyeDomeLightingDistance( int distance );
410  int eyeDomeLightingDistance() const { return mEyeDomeLightingDistance; }
411 
417  void setDebugShadowMapSettings( bool enabled, Qt::Corner corner, double size );
419  bool debugShadowMapEnabled() const { return mDebugShadowMapEnabled; }
421  Qt::Corner debugShadowMapCorner() const { return mDebugShadowMapCorner; }
423  double debugShadowMapSize() const { return mDebugShadowMapSize; }
424 
430  void setDebugDepthMapSettings( bool enabled, Qt::Corner corner, double size );
432  bool debugDepthMapEnabled() const { return mDebugDepthMapEnabled; }
434  Qt::Corner debugDepthMapCorner() const { return mDebugDepthMapCorner; }
436  double debugDepthMapSize() const { return mDebugDepthMapSize; }
437 
443  QList<QgsLightSource *> lightSources() const;
444 
453  void setLightSources( const QList<QgsLightSource *> &lights SIP_TRANSFER );
454 
459  float fieldOfView() const { return mFieldOfView; }
460 
465  void setFieldOfView( const float fieldOfView );
466 
471  Qt3DRender::QCameraLens::ProjectionType projectionType() const SIP_SKIP { return mProjectionType; }
472 
477  void setProjectionType( const Qt3DRender::QCameraLens::ProjectionType projectionType ) SIP_SKIP;
478 
479 #ifndef SIP_RUN
480 
485  QgsCameraController::NavigationMode cameraNavigationMode() const { return mCameraNavigationMode; }
486 
491  void setCameraNavigationMode( QgsCameraController::NavigationMode navigationMode );
492 #endif
493 
498  double cameraMovementSpeed() const { return mCameraMovementSpeed; }
499 
504  void setCameraMovementSpeed( double movementSpeed );
505 
511  void setOutputDpi( const double dpi ) {mDpi = dpi;}
512 
513 
519  double outputDpi() const { return mDpi; }
520 
525  QgsSkyboxSettings skyboxSettings() const SIP_SKIP { return mSkyboxSettings; }
526 
531  QgsShadowSettings shadowSettings() const SIP_SKIP { return mShadowSettings; }
532 
537  void setSkyboxSettings( const QgsSkyboxSettings &skyboxSettings ) SIP_SKIP;
538 
543  void setShadowSettings( const QgsShadowSettings &shadowSettings ) SIP_SKIP;
544 
550  bool isSkyboxEnabled() const { return mIsSkyboxEnabled; }
551 
557  void setIsSkyboxEnabled( bool enabled ) { mIsSkyboxEnabled = enabled; }
558 
564  bool isFpsCounterEnabled() const { return mIsFpsCounterEnabled; }
565 
571  void setIsFpsCounterEnabled( bool fpsCounterEnabled );
572 
578  bool terrainRenderingEnabled() const { return mTerrainRenderingEnabled; }
579 
585  void setTerrainRenderingEnabled( bool terrainRenderingEnabled );
586 
593  Qgis::RendererUsage rendererUsage() const;
594 
601  void setRendererUsage( Qgis::RendererUsage rendererUsage );
602 
608  Qgis::ViewSyncModeFlags viewSyncMode() const { return mViewSyncMode; }
609 
615  void setViewSyncMode( Qgis::ViewSyncModeFlags mode );
616 
622  bool viewFrustumVisualizationEnabled() const { return mVisualizeViewFrustum; }
623 
629  void setViewFrustumVisualizationEnabled( bool enabled );
630 
635  Qgs3DAxisSettings get3dAxisSettings() const SIP_SKIP { return m3dAxisSettings; }
636 
641  void set3dAxisSettings( const Qgs3DAxisSettings &axisSettings ) SIP_SKIP;
642 
648  bool isDebugOverlayEnabled() const { return mIsDebugOverlayEnabled; }
649 
658  void setIsDebugOverlayEnabled( bool debugOverlayEnabled );
659 
660  signals:
661 
668 
673 
681 
692 
697  void terrainElevationOffsetChanged( float newElevation );
698 
704 
710 
716 
721 
727 
733 
739 
742 
748 
754 
760 
766 
772 
778 
784 
790 
796 
802 
808 
814 
820 
826 
831  void fpsCounterEnabledChanged( bool fpsCounterEnabled );
832 
839 
845 
850  void debugOverlayEnabledChanged( bool debugOverlayEnabled );
851 
852  private:
853 #ifdef SIP_RUN
854  Qgs3DMapSettings &operator=( const Qgs3DMapSettings & );
855 #endif
856 
857  private:
859  void connectChangedSignalsToSettingsChanged();
860 
861  private:
863  QgsVector3D mOrigin;
865  QColor mBackgroundColor = Qt::black;
866  QColor mSelectionColor;
867  double mTerrainVerticalScale = 1;
868  std::unique_ptr<QgsTerrainGenerator> mTerrainGenerator;
869  int mMapTileResolution = 512;
870  float mMaxTerrainScreenError = 3.f;
871  float mMaxTerrainGroundError = 1.f;
872  float mTerrainElevationOffset = 0.0f;
873  bool mTerrainShadingEnabled = false;
874  QgsPhongMaterialSettings mTerrainShadingMaterial;
875  QString mTerrainMapTheme;
876  bool mShowTerrainBoundingBoxes = false;
877  bool mShowTerrainTileInfo = false;
878  bool mShowCameraViewCenter = false;
879  bool mShowCameraRotationCenter = false;
880  bool mShowLightSources = false;
881  bool mShowLabels = false;
882  QList< QgsLightSource * > mLightSources;
883  float mFieldOfView = 45.0f; //<! Camera lens field of view value
884  Qt3DRender::QCameraLens::ProjectionType mProjectionType = Qt3DRender::QCameraLens::PerspectiveProjection; //<! Camera lens projection type
885  QgsCameraController::NavigationMode mCameraNavigationMode = QgsCameraController::NavigationMode::TerrainBasedNavigation;
886  double mCameraMovementSpeed = 5.0;
887  QList<QgsMapLayerRef> mLayers;
888  QList<QgsAbstract3DRenderer *> mRenderers;
890  QgsCoordinateTransformContext mTransformContext;
891  QgsPathResolver mPathResolver;
892  QgsMapThemeCollection *mMapThemes = nullptr;
893  double mDpi = 96;
894  bool mIsFpsCounterEnabled = false;
895 
896  bool mIsSkyboxEnabled = false;
897  QgsSkyboxSettings mSkyboxSettings;
898  QgsShadowSettings mShadowSettings;
899 
900  bool mEyeDomeLightingEnabled = false;
901  double mEyeDomeLightingStrength = 1000.0;
902  int mEyeDomeLightingDistance = 1;
903 
904  Qgis::ViewSyncModeFlags mViewSyncMode;
905  bool mVisualizeViewFrustum = false;
906 
907  bool mDebugShadowMapEnabled = false;
908  Qt::Corner mDebugShadowMapCorner = Qt::Corner::TopLeftCorner;
909  double mDebugShadowMapSize = 0.2;
910 
911  bool mDebugDepthMapEnabled = false;
912  Qt::Corner mDebugDepthMapCorner = Qt::Corner::TopRightCorner;
913  double mDebugDepthMapSize = 0.2;
914 
915  bool mTerrainRenderingEnabled = true;
916 
917  Qgis::RendererUsage mRendererUsage;
918 
919  Qgs3DAxisSettings m3dAxisSettings;
920 
921  bool mIsDebugOverlayEnabled = false;
922 
923 };
924 
925 
926 #endif // QGS3DMAPSETTINGS_H
RendererUsage
Usage of the renderer.
Definition: qgis.h:1666
Contains the configuration of a 3d axis.
void mapTileResolutionChanged()
Emitted when the map tile resoulution has changed.
void terrainVerticalScaleChanged()
Emitted when the vertical scale of the terrain has changed.
bool isDebugOverlayEnabled() const
Returns whether debug overlay is enabled.
Qt::Corner debugDepthMapCorner() const
Returns the corner where the shadow map preview is displayed.
void settingsChanged()
Emitted when one of the configuration settings has changed.
void renderersChanged()
Emitted when the list of map's extra renderers have been modified.
QList< QgsAbstract3DRenderer * > renderers() const
Returns list of extra 3D renderers.
QgsTerrainGenerator * terrainGenerator() const
Returns the terrain generator.
void eyeDomeLightingDistanceChanged()
Emitted when the eye dome lighting distance has changed.
void terrainShadingChanged()
Emitted when terrain shading enabled flag or terrain shading material has changed.
double cameraMovementSpeed() const
Returns the camera movement speed.
Qt3DRender::QCameraLens::ProjectionType projectionType() const
Returns the camera lens' projection type.
bool debugDepthMapEnabled() const
Returns whether the shadow map debugging is enabled.
bool isSkyboxEnabled() const
Returns whether the skybox is enabled.
void debugDepthMapSettingsChanged()
Emitted when depth map debugging has changed.
double outputDpi() const
Returns DPI used for conversion between real world units (e.g.
double eyeDomeLightingStrength() const
Returns the eye dome lighting strength value.
void backgroundColorChanged()
Emitted when the background color has changed.
void showTerrainBoundingBoxesChanged()
Emitted when the flag whether terrain's bounding boxes are shown has changed.
Qgs3DAxisSettings get3dAxisSettings() const
Returns the current configuration of 3d axis.
Qt::Corner debugShadowMapCorner() const
Returns the corner where the shadow map preview is displayed.
void setMapThemeCollection(QgsMapThemeCollection *mapThemes)
Sets pointer to the collection of map themes.
bool showCameraViewCenter() const
Returns whether to show camera's view center as a sphere (for debugging)
void showCameraRotationCenterChanged()
Emitted when the flag whether camera's rotation center is shown has changed.
void directionalLightsChanged()
Emitted when the list of directional lights changes.
void cameraNavigationModeChanged()
Emitted when the camera navigation mode was changed.
void shadowSettingsChanged()
Emitted when shadow rendering settings are changed.
void eyeDomeLightingEnabledChanged()
Emitted when the flag whether eye dome lighting is used has changed.
void debugOverlayEnabledChanged(bool debugOverlayEnabled)
Emitted when the debug overaly is enabled or disabled.
void setOutputDpi(const double dpi)
Sets DPI used for conversion between real world units (e.g.
void setIsSkyboxEnabled(bool enabled)
Sets whether the skybox is enabled.
void setOrigin(const QgsVector3D &origin)
Sets coordinates in map CRS at which our 3D world has origin (0,0,0)
void skyboxSettingsChanged()
Emitted when skybox settings are changed.
QgsShadowSettings shadowSettings() const
Returns the current configuration of shadows.
void terrainMapThemeChanged()
Emitted when terrain's map theme has changed.
Qgs3DMapSettings & operator=(Qgs3DMapSettings const &)=delete
void pointLightsChanged()
Emitted when the list of point lights changes.
double debugDepthMapSize() const
Returns the size of the shadow map preview.
bool viewFrustumVisualizationEnabled() const
Returns whether the camera's view frustum is visualized on the 2D map canvas.
void projectionTypeChanged()
Emitted when the camera lens projection type changes.
float fieldOfView() const
Returns the camera lens' field of view.
void selectionColorChanged()
Emitted when the selection color has changed.
Qgis::ViewSyncModeFlags viewSyncMode() const
Returns the view sync mode (used to synchronize the 2D main map canvas and the 3D camera navigation)
float terrainElevationOffset() const
Returns the elevation offset of the terrain (used to move the terrain up or down)
int eyeDomeLightingDistance() const
Returns the eye dome lighting distance value (contributes to the contrast of the image)
const QgsPathResolver & pathResolver() const
Returns the path resolver for conversion between relative and absolute paths during rendering operati...
void lightSourcesChanged()
Emitted when any of the light source settings in the map changes.
void showLightSourceOriginsChanged()
Emitted when the flag whether light source origins are shown has changed.
double debugShadowMapSize() const
Returns the size of the shadow map preview.
void setPathResolver(const QgsPathResolver &resolver)
Sets the path resolver for conversion between relative and absolute paths during rendering operations...
bool showTerrainBoundingBoxes() const
Returns whether to display bounding boxes of terrain tiles (for debugging)
void showLabelsChanged()
Emitted when the flag whether labels are displayed on terrain tiles has changed.
void maxTerrainScreenErrorChanged()
Emitted when the maximum terrain screen error has changed.
bool showLabels() const
Returns whether to display labels on terrain tiles.
void terrainElevationOffsetChanged(float newElevation)
Emitted when the terrain elevation offset is changed.
bool debugShadowMapEnabled() const
Returns whether the shadow map debugging is enabled.
bool terrainRenderingEnabled() const
Returns whether the 2D terrain surface will be rendered.
void fpsCounterEnabledChanged(bool fpsCounterEnabled)
Emitted when the FPS counter is enabled or disabled.
void axisSettingsChanged()
Emitted when 3d axis rendering settings are changed.
void viewFrustumVisualizationEnabledChanged()
Emitted when the camera's view frustum visualization on the main 2D map canvas is enabled or disabled...
bool showTerrainTilesInfo() const
Returns whether to display extra tile info on top of terrain tiles (for debugging)
void layersChanged()
Emitted when the list of map layers for 3d rendering has changed.
void showTerrainTilesInfoChanged()
Emitted when the flag whether terrain's tile info is shown has changed.
QgsMapThemeCollection * mapThemeCollection() const
Returns pointer to the collection of map themes.
void eyeDomeLightingStrengthChanged()
Emitted when the eye dome lighting strength has changed.
QgsSkyboxSettings skyboxSettings() const
Returns the current configuration of the skybox.
bool isTerrainShadingEnabled() const
Returns whether terrain shading is enabled.
void cameraMovementSpeedChanged()
Emitted when the camera movement speed was changed.
QgsCoordinateReferenceSystem crs() const
Returns coordinate reference system used in the 3D scene.
bool eyeDomeLightingEnabled() const
Returns whether eye dome lighting is used.
QgsPhongMaterialSettings terrainShadingMaterial() const
Returns terrain shading material.
bool isFpsCounterEnabled() const
Returns whether FPS counter label is enabled.
QString terrainMapTheme() const
Returns name of the map theme (from the active project) that will be used for terrain's texture.
void fieldOfViewChanged()
Emitted when the camera lens field of view changes.
QgsCameraController::NavigationMode cameraNavigationMode() const
Returns the navigation mode used by the camera.
void terrainGeneratorChanged()
Emitted when the terrain generator has changed.
bool showLightSourceOrigins() const
Returns whether to show light source origins as a sphere (for debugging)
void debugShadowMapSettingsChanged()
Emitted when shadow map debugging has changed.
void showCameraViewCenterChanged()
Emitted when the flag whether camera's view center is shown has changed.
void maxTerrainGroundErrorChanged()
Emitted when the maximum terrain ground error has changed.
QgsVector3D origin() const
Returns coordinates in map CRS at which 3D scene has origin (0,0,0)
bool showCameraRotationCenter() const
Returns whether to show camera's rotation center as a sphere (for debugging)
Base class for all renderers that may to participate in 3D view.
NavigationMode
The navigation mode used by the camera.
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Base class for all map layer types.
Definition: qgsmaplayer.h:73
Container class that allows storage of map themes consisting of visible map layers and layer styles.
Resolves relative paths into absolute paths and vice versa.
Contains elevation properties for a QgsProject.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:104
Represents a raster layer.
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
class containing the configuration of shadows rendering 3
Contains the configuration of a skybox entity.
Base class for objects with an associated (optional) temporal range.
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_TRANSFER
Definition: qgis_sip.h:36
const QgsCoordinateReferenceSystem & crs