QGIS API Documentation  3.21.0-Master (564c892cfd)
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 "qgsskyboxsettings.h"
35 #include "qgsshadowsettings.h"
36 #include "qgscameracontroller.h"
37 
38 class QgsMapLayer;
39 class QgsRasterLayer;
40 
42 
43 
45 class QgsProject;
46 
47 class QDomElement;
48 
55 class _3D_EXPORT Qgs3DMapSettings : public QObject, public QgsTemporalRangeObject
56 {
57  Q_OBJECT
58  public:
59 
61  Qgs3DMapSettings() = default;
63  Qgs3DMapSettings( const Qgs3DMapSettings &other );
64  ~Qgs3DMapSettings() override;
65 
67 
69  void readXml( const QDomElement &elem, const QgsReadWriteContext &context );
71  QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const;
73  void resolveReferences( const QgsProject &project );
74 
86  void setOrigin( const QgsVector3D &origin ) { mOrigin = origin; }
88  QgsVector3D origin() const { return mOrigin; }
89 
91  QgsVector3D mapToWorldCoordinates( const QgsVector3D &mapCoords ) const;
93  QgsVector3D worldToMapCoordinates( const QgsVector3D &worldCoords ) const;
94 
96  void setCrs( const QgsCoordinateReferenceSystem &crs );
98  QgsCoordinateReferenceSystem crs() const { return mCrs; }
99 
107  QgsCoordinateTransformContext transformContext() const;
108 
116  void setTransformContext( const QgsCoordinateTransformContext &context );
117 
125  const QgsPathResolver &pathResolver() const { return mPathResolver; }
126 
134  void setPathResolver( const QgsPathResolver &resolver ) { mPathResolver = resolver; }
135 
142  QgsMapThemeCollection *mapThemeCollection() const { return mMapThemes; }
143 
149  void setMapThemeCollection( QgsMapThemeCollection *mapThemes ) { mMapThemes = mapThemes; }
150 
152  void setBackgroundColor( const QColor &color );
154  QColor backgroundColor() const;
155 
157  void setSelectionColor( const QColor &color );
159  QColor selectionColor() const;
160 
172  void setLayers( const QList<QgsMapLayer *> &layers );
173 
185  QList<QgsMapLayer *> layers() const;
186 
187  //
188  // terrain related config
189  //
190 
203  void setTerrainLayers( const QList<QgsMapLayer *> &layers );
204 
217  QList<QgsMapLayer *> terrainLayers() const;
218 
223  void setTerrainVerticalScale( double zScale );
225  double terrainVerticalScale() const;
226 
231  void setMapTileResolution( int res );
232 
237  int mapTileResolution() const;
238 
243  void setMaxTerrainScreenError( float error );
244 
252  float maxTerrainScreenError() const;
253 
258  void setMaxTerrainGroundError( float error );
259 
266  float maxTerrainGroundError() const;
267 
273  void setTerrainElevationOffset( float offset );
274 
278  float terrainElevationOffset() const { return mTerrainElevationOffset; }
279 
284  void setTerrainGenerator( QgsTerrainGenerator *gen SIP_TRANSFER ) SIP_SKIP;
286  QgsTerrainGenerator *terrainGenerator() const SIP_SKIP { return mTerrainGenerator.get(); }
287 
293  void setTerrainShadingEnabled( bool enabled );
294 
301  bool isTerrainShadingEnabled() const { return mTerrainShadingEnabled; }
302 
308  void setTerrainShadingMaterial( const QgsPhongMaterialSettings &material );
309 
315  QgsPhongMaterialSettings terrainShadingMaterial() const { return mTerrainShadingMaterial; }
316 
322  void setTerrainMapTheme( const QString &theme );
323 
330  QString terrainMapTheme() const { return mTerrainMapTheme; }
331 
332  //
333  // misc configuration
334  //
335 
337  void setRenderers( const QList<QgsAbstract3DRenderer *> &renderers SIP_TRANSFER );
339  QList<QgsAbstract3DRenderer *> renderers() const { return mRenderers; }
340 
342  void setShowTerrainBoundingBoxes( bool enabled );
344  bool showTerrainBoundingBoxes() const { return mShowTerrainBoundingBoxes; }
346  void setShowTerrainTilesInfo( bool enabled );
348  bool showTerrainTilesInfo() const { return mShowTerrainTileInfo; }
349 
354  void setShowCameraViewCenter( bool enabled );
355 
360  bool showCameraViewCenter() const { return mShowCameraViewCenter; }
361 
366  void setShowLightSourceOrigins( bool enabled );
367 
372  bool showLightSourceOrigins() const { return mShowLightSources; }
373 
375  void setShowLabels( bool enabled );
377  bool showLabels() const { return mShowLabels; }
378 
384  void setEyeDomeLightingEnabled( bool enabled );
386  bool eyeDomeLightingEnabled() const { return mEyeDomeLightingEnabled; }
387 
393  void setEyeDomeLightingStrength( double strength );
395  double eyeDomeLightingStrength() const { return mEyeDomeLightingStrength; }
396 
402  void setEyeDomeLightingDistance( int distance );
404  int eyeDomeLightingDistance() const { return mEyeDomeLightingDistance; }
405 
411  void setDebugShadowMapSettings( bool enabled, Qt::Corner corner, double size );
413  bool debugShadowMapEnabled() const { return mDebugShadowMapEnabled; }
415  Qt::Corner debugShadowMapCorner() const { return mDebugShadowMapCorner; }
417  double debugShadowMapSize() const { return mDebugShadowMapSize; }
418 
424  void setDebugDepthMapSettings( bool enabled, Qt::Corner corner, double size );
426  bool debugDepthMapEnabled() const { return mDebugDepthMapEnabled; }
428  Qt::Corner debugDepthMapCorner() const { return mDebugDepthMapCorner; }
430  double debugDepthMapSize() const { return mDebugDepthMapSize; }
431 
436  QList<QgsPointLightSettings> pointLights() const { return mPointLights; }
437 
442  QList<QgsDirectionalLightSettings> directionalLights() const { return mDirectionalLights; }
443 
448  void setPointLights( const QList<QgsPointLightSettings> &pointLights );
449 
454  void setDirectionalLights( const QList<QgsDirectionalLightSettings> &directionalLights );
455 
460  float fieldOfView() const { return mFieldOfView; }
461 
466  void setFieldOfView( const float fieldOfView );
467 
472  Qt3DRender::QCameraLens::ProjectionType projectionType() const SIP_SKIP { return mProjectionType; }
473 
478  void setProjectionType( const Qt3DRender::QCameraLens::ProjectionType projectionType ) SIP_SKIP;
479 
480 #ifndef SIP_RUN
481 
486  QgsCameraController::NavigationMode cameraNavigationMode() const { return mCameraNavigationMode; }
487 
492  void setCameraNavigationMode( QgsCameraController::NavigationMode navigationMode );
493 #endif
494 
499  double cameraMovementSpeed() const { return mCameraMovementSpeed; }
500 
505  void setCameraMovementSpeed( double movementSpeed );
506 
512  void setOutputDpi( const double dpi ) {mDpi = dpi;}
513 
514 
520  double outputDpi() const { return mDpi; }
521 
526  QgsSkyboxSettings skyboxSettings() const SIP_SKIP { return mSkyboxSettings; }
527 
532  QgsShadowSettings shadowSettings() const SIP_SKIP { return mShadowSettings; }
533 
538  void setSkyboxSettings( const QgsSkyboxSettings &skyboxSettings ) SIP_SKIP;
539 
544  void setShadowSettings( const QgsShadowSettings &shadowSettings ) SIP_SKIP;
545 
551  bool isSkyboxEnabled() const { return mIsSkyboxEnabled; }
552 
558  void setIsSkyboxEnabled( bool enabled ) { mIsSkyboxEnabled = enabled; }
559 
565  bool isFpsCounterEnabled() const { return mIsFpsCounterEnabled; }
566 
572  void setIsFpsCounterEnabled( bool fpsCounterEnabled );
573 
574  signals:
579 
588 
599 
610 
615  void terrainElevationOffsetChanged( float newElevation );
616 
622 
628 
634 
639 
645 
651 
654 
660 
666 
672 
678 
684 
690 
696 
702 
708 
714 
720 
726 
732 
738  void fpsCounterEnabledChanged( bool fpsCounterEnabled );
739 
740  private:
741 #ifdef SIP_RUN
742  Qgs3DMapSettings &operator=( const Qgs3DMapSettings & );
743 #endif
744 
745  private:
747  QgsVector3D mOrigin;
749  QColor mBackgroundColor = Qt::black;
750  QColor mSelectionColor;
751  double mTerrainVerticalScale = 1;
752  std::unique_ptr<QgsTerrainGenerator> mTerrainGenerator;
753  int mMapTileResolution = 512;
754  float mMaxTerrainScreenError = 3.f;
755  float mMaxTerrainGroundError = 1.f;
756  float mTerrainElevationOffset = 0.0f;
757  bool mTerrainShadingEnabled = false;
758  QgsPhongMaterialSettings mTerrainShadingMaterial;
759  QString mTerrainMapTheme;
760  bool mShowTerrainBoundingBoxes = false;
761  bool mShowTerrainTileInfo = false;
762  bool mShowCameraViewCenter = false;
763  bool mShowLightSources = false;
764  bool mShowLabels = false;
765  QList<QgsPointLightSettings> mPointLights;
766  QList<QgsDirectionalLightSettings> mDirectionalLights;
767  float mFieldOfView = 45.0f; //<! Camera lens field of view value
768  Qt3DRender::QCameraLens::ProjectionType mProjectionType = Qt3DRender::QCameraLens::PerspectiveProjection; //<! Camera lens projection type
769  QgsCameraController::NavigationMode mCameraNavigationMode = QgsCameraController::NavigationMode::TerrainBasedNavigation;
770  double mCameraMovementSpeed = 5.0;
771  QList<QgsMapLayerRef> mLayers;
772  QList<QgsMapLayerRef> mTerrainLayers;
773  QList<QgsAbstract3DRenderer *> mRenderers;
775  QgsCoordinateTransformContext mTransformContext;
776  QgsPathResolver mPathResolver;
777  QgsMapThemeCollection *mMapThemes = nullptr;
778  double mDpi = 96;
779  bool mIsFpsCounterEnabled = false;
780 
781  bool mIsSkyboxEnabled = false;
782  QgsSkyboxSettings mSkyboxSettings;
783  QgsShadowSettings mShadowSettings;
784 
785  bool mEyeDomeLightingEnabled = false;
786  double mEyeDomeLightingStrength = 1000.0;
787  int mEyeDomeLightingDistance = 1;
788 
789  bool mDebugShadowMapEnabled = false;
790  Qt::Corner mDebugShadowMapCorner = Qt::Corner::TopLeftCorner;
791  double mDebugShadowMapSize = 0.2;
792 
793  bool mDebugDepthMapEnabled = false;
794  Qt::Corner mDebugDepthMapCorner = Qt::Corner::TopRightCorner;
795  double mDebugDepthMapSize = 0.2;
796 };
797 
798 
799 #endif // QGS3DMAPSETTINGS_H
void mapTileResolutionChanged()
Emitted when the map tile resoulution has changed.
void terrainVerticalScaleChanged()
Emitted when the vertical scale of the terrain has changed.
Qt::Corner debugDepthMapCorner() const
Returns the corner where the shadow map preview is displayed.
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 terrain generator. It takes care of producing terrain tiles from the input data.
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.
QList< QgsDirectionalLightSettings > directionalLights() const
Returns list of directional lights defined in the scene.
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.
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 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 terrainLayersChanged()
Emitted when the list of map layers for terrain texture has changed.
void eyeDomeLightingEnabledChanged()
Emitted when the flag whether eye dome lighting is used has changed.
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.
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.
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 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)
Qgs3DMapSettings()=default
Constructor for Qgs3DMapSettings.
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.
void fpsCounterEnabledChanged(bool fpsCounterEnabled)
Emitted when the FPS counter 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.
QList< QgsPointLightSettings > pointLights() const
Returns list of point lights defined in the scene.
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)
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:70
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.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:99
Represents a raster layer.
The class is used as a container of context for various read/write operations on other objects.
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