QGIS API Documentation 3.39.0-Master (3aed037ce22)
Loading...
Searching...
No Matches
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"
29#include "qgsterraingenerator.h"
30#include "qgsvector3d.h"
31#include "qgs3daxissettings.h"
32#include "qgsskyboxsettings.h"
33#include "qgsshadowsettings.h"
36
37class QgsMapLayer;
38class QgsRasterLayer;
39class QgsLightSource;
42class QgsProject;
43
44class QDomElement;
45
51class _3D_EXPORT Qgs3DMapSettings : public QObject, public QgsTemporalRangeObject
52{
53 Q_OBJECT
54 public:
55
57 Qgs3DMapSettings( const Qgs3DMapSettings &other );
58 ~Qgs3DMapSettings() override;
59
61
63 void readXml( const QDomElement &elem, const QgsReadWriteContext &context );
65 QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const;
67 void resolveReferences( const QgsProject &project );
68
75 QgsRectangle extent() const { return mExtent; }
76
86 void setExtent( const QgsRectangle &extent );
87
99 void setOrigin( const QgsVector3D &origin ) { mOrigin = origin; }
101 QgsVector3D origin() const { return mOrigin; }
102
104 QgsVector3D mapToWorldCoordinates( const QgsVector3D &mapCoords ) const;
106 QgsVector3D worldToMapCoordinates( const QgsVector3D &worldCoords ) const;
107
109 void setCrs( const QgsCoordinateReferenceSystem &crs );
111 QgsCoordinateReferenceSystem crs() const { return mCrs; }
112
120 QgsCoordinateTransformContext transformContext() const;
121
129 void setTransformContext( const QgsCoordinateTransformContext &context );
130
137 const QgsPathResolver &pathResolver() const { return mPathResolver; }
138
145 void setPathResolver( const QgsPathResolver &resolver ) { mPathResolver = resolver; }
146
153 QgsMapThemeCollection *mapThemeCollection() const { return mMapThemes; }
154
160 void setMapThemeCollection( QgsMapThemeCollection *mapThemes ) { mMapThemes = mapThemes; }
161
163 void setBackgroundColor( const QColor &color );
165 QColor backgroundColor() const;
166
168 void setSelectionColor( const QColor &color );
170 QColor selectionColor() const;
171
180 void setLayers( const QList<QgsMapLayer *> &layers );
181
190 QList<QgsMapLayer *> layers() const;
191
192 //
193 // terrain related config
194 //
195
201 void configureTerrainFromProject( QgsProjectElevationProperties *properties, const QgsRectangle &fullExtent ) SIP_SKIP;
202
207 void setTerrainVerticalScale( double zScale );
209 double terrainVerticalScale() const;
210
215 void setMapTileResolution( int res );
216
221 int mapTileResolution() const;
222
227 void setMaxTerrainScreenError( float error );
228
236 float maxTerrainScreenError() const;
237
242 void setMaxTerrainGroundError( float error );
243
250 float maxTerrainGroundError() const;
251
257 void setTerrainElevationOffset( float offset );
258
262 float terrainElevationOffset() const { return mTerrainElevationOffset; }
263
276 void setTerrainGenerator( QgsTerrainGenerator *gen SIP_TRANSFER ) SIP_SKIP;
277
289 {
290 return mTerrainGenerator.get();
291 }
292
298 void setTerrainShadingEnabled( bool enabled );
299
306 bool isTerrainShadingEnabled() const { return mTerrainShadingEnabled; }
307
313 void setTerrainShadingMaterial( const QgsPhongMaterialSettings &material );
314
320 QgsPhongMaterialSettings terrainShadingMaterial() const { return mTerrainShadingMaterial; }
321
327 void setTerrainMapTheme( const QString &theme );
328
335 QString terrainMapTheme() const { return mTerrainMapTheme; }
336
337 //
338 // misc configuration
339 //
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 setShowCameraRotationCenter( bool enabled );
367
372 bool showCameraRotationCenter() const { return mShowCameraRotationCenter; }
373
378 void setShowLightSourceOrigins( bool enabled );
379
384 bool showLightSourceOrigins() const { return mShowLightSources; }
385
387 void setShowLabels( bool enabled );
389 bool showLabels() const { return mShowLabels; }
390
396 void setEyeDomeLightingEnabled( bool enabled );
398 bool eyeDomeLightingEnabled() const { return mEyeDomeLightingEnabled; }
399
405 void setEyeDomeLightingStrength( double strength );
407 double eyeDomeLightingStrength() const { return mEyeDomeLightingStrength; }
408
414 void setEyeDomeLightingDistance( int distance );
416 int eyeDomeLightingDistance() const { return mEyeDomeLightingDistance; }
417
423 void setDebugShadowMapSettings( bool enabled, Qt::Corner corner, double size );
425 bool debugShadowMapEnabled() const { return mDebugShadowMapEnabled; }
427 Qt::Corner debugShadowMapCorner() const { return mDebugShadowMapCorner; }
429 double debugShadowMapSize() const { return mDebugShadowMapSize; }
430
436 void setDebugDepthMapSettings( bool enabled, Qt::Corner corner, double size );
438 bool debugDepthMapEnabled() const { return mDebugDepthMapEnabled; }
440 Qt::Corner debugDepthMapCorner() const { return mDebugDepthMapCorner; }
442 double debugDepthMapSize() const { return mDebugDepthMapSize; }
443
449 QList<QgsLightSource *> lightSources() const;
450
459 void setLightSources( const QList<QgsLightSource *> &lights SIP_TRANSFER );
460
465 float fieldOfView() const { return mFieldOfView; }
466
471 void setFieldOfView( const float fieldOfView );
472
477 Qt3DRender::QCameraLens::ProjectionType projectionType() const SIP_SKIP { return mProjectionType; }
478
483 void setProjectionType( const Qt3DRender::QCameraLens::ProjectionType projectionType ) SIP_SKIP;
484
485#ifndef SIP_RUN
486
491 Qgis::NavigationMode cameraNavigationMode() const { return mCameraNavigationMode; }
492
497 void setCameraNavigationMode( Qgis::NavigationMode navigationMode );
498#endif
499
504 double cameraMovementSpeed() const { return mCameraMovementSpeed; }
505
510 void setCameraMovementSpeed( double movementSpeed );
511
517 void setOutputDpi( const double dpi ) {mDpi = dpi;}
518
519
525 double outputDpi() const { return mDpi; }
526
531 QgsSkyboxSettings skyboxSettings() const SIP_SKIP { return mSkyboxSettings; }
532
537 QgsShadowSettings shadowSettings() const SIP_SKIP { return mShadowSettings; }
538
543 QgsAmbientOcclusionSettings ambientOcclusionSettings() const SIP_SKIP { return mAmbientOcclusionSettings; }
544
549 void setSkyboxSettings( const QgsSkyboxSettings &skyboxSettings ) SIP_SKIP;
550
555 void setShadowSettings( const QgsShadowSettings &shadowSettings ) SIP_SKIP;
556
561 void setAmbientOcclusionSettings( const QgsAmbientOcclusionSettings &ambientOcclusionSettings ) SIP_SKIP;
562
568 bool isSkyboxEnabled() const { return mIsSkyboxEnabled; }
569
575 void setIsSkyboxEnabled( bool enabled ) { mIsSkyboxEnabled = enabled; }
576
582 bool isFpsCounterEnabled() const { return mIsFpsCounterEnabled; }
583
589 void setIsFpsCounterEnabled( bool fpsCounterEnabled );
590
596 bool terrainRenderingEnabled() const { return mTerrainRenderingEnabled; }
597
603 void setTerrainRenderingEnabled( bool terrainRenderingEnabled );
604
611 Qgis::RendererUsage rendererUsage() const;
612
619 void setRendererUsage( Qgis::RendererUsage rendererUsage );
620
626 Qgis::ViewSyncModeFlags viewSyncMode() const { return mViewSyncMode; }
627
633 void setViewSyncMode( Qgis::ViewSyncModeFlags mode );
634
640 bool viewFrustumVisualizationEnabled() const { return mVisualizeViewFrustum; }
641
647 void setViewFrustumVisualizationEnabled( bool enabled );
648
653 Qgs3DAxisSettings get3DAxisSettings() const SIP_SKIP { return m3dAxisSettings; }
654
659 void set3DAxisSettings( const Qgs3DAxisSettings &axisSettings, bool force = false ) SIP_SKIP;
660
666 bool isDebugOverlayEnabled() const { return mIsDebugOverlayEnabled; }
667
676 void setIsDebugOverlayEnabled( bool debugOverlayEnabled );
677
683 bool showExtentIn2DView() const { return mShowExtentIn2DView; }
684
689 void setShowExtentIn2DView( bool show );
690
691 signals:
692
699
704
712
723
728 void terrainElevationOffsetChanged( float newElevation );
729
735
741
747
752
758
764
770
773
779
785
791
797
803
809
815
821
827
833
839
845
851
857
858
864
869 void fpsCounterEnabledChanged( bool fpsCounterEnabled );
870
877
883
888 void debugOverlayEnabledChanged( bool debugOverlayEnabled );
889
896
903
904 private:
905#ifdef SIP_RUN
906 Qgs3DMapSettings &operator=( const Qgs3DMapSettings & );
907#endif
908
909 private:
911 void connectChangedSignalsToSettingsChanged();
912
913 private:
915 QgsVector3D mOrigin;
917 QColor mBackgroundColor = Qt::black;
918 QColor mSelectionColor;
919 double mTerrainVerticalScale = 1;
920 std::unique_ptr<QgsTerrainGenerator> mTerrainGenerator;
921 int mMapTileResolution = 512;
922 float mMaxTerrainScreenError = 3.f;
923 float mMaxTerrainGroundError = 1.f;
924 float mTerrainElevationOffset = 0.0f;
925 bool mTerrainShadingEnabled = false;
926 QgsPhongMaterialSettings mTerrainShadingMaterial;
927 QString mTerrainMapTheme;
928 bool mShowTerrainBoundingBoxes = false;
929 bool mShowTerrainTileInfo = false;
930 bool mShowCameraViewCenter = false;
931 bool mShowCameraRotationCenter = false;
932 bool mShowLightSources = false;
933 bool mShowLabels = false;
934 QList< QgsLightSource * > mLightSources;
935 float mFieldOfView = 45.0f; //<! Camera lens field of view value
936 Qt3DRender::QCameraLens::ProjectionType mProjectionType = Qt3DRender::QCameraLens::PerspectiveProjection; //<! Camera lens projection type
938 double mCameraMovementSpeed = 5.0;
939 QList<QgsMapLayerRef> mLayers;
941 QgsCoordinateTransformContext mTransformContext;
942 QgsPathResolver mPathResolver;
943 QgsMapThemeCollection *mMapThemes = nullptr;
944 double mDpi = 96;
945 bool mIsFpsCounterEnabled = false;
946
947 bool mIsSkyboxEnabled = false;
948 QgsSkyboxSettings mSkyboxSettings;
949 QgsShadowSettings mShadowSettings;
950 QgsAmbientOcclusionSettings mAmbientOcclusionSettings;
951
952 bool mEyeDomeLightingEnabled = false;
953 double mEyeDomeLightingStrength = 1000.0;
954 int mEyeDomeLightingDistance = 1;
955
956 Qgis::ViewSyncModeFlags mViewSyncMode;
957 bool mVisualizeViewFrustum = false;
958
959 bool mDebugShadowMapEnabled = false;
960 Qt::Corner mDebugShadowMapCorner = Qt::Corner::TopLeftCorner;
961 double mDebugShadowMapSize = 0.2;
962
963 bool mDebugDepthMapEnabled = false;
964 Qt::Corner mDebugDepthMapCorner = Qt::Corner::TopRightCorner;
965 double mDebugDepthMapSize = 0.2;
966
967 bool mTerrainRenderingEnabled = true;
968
969 Qgis::RendererUsage mRendererUsage;
970
971 Qgs3DAxisSettings m3dAxisSettings;
972
973 bool mIsDebugOverlayEnabled = false;
974
975 QgsRectangle mExtent;
976
977 bool mShowExtentIn2DView = false;
978
979};
980
981
982#endif // QGS3DMAPSETTINGS_H
QFlags< ViewSyncModeFlag > ViewSyncModeFlags
Definition qgis.h:3043
NavigationMode
The navigation mode used by 3D cameras.
Definition qgis.h:3681
@ TerrainBased
The default navigation based on the terrain.
RendererUsage
Usage of the renderer.
Definition qgis.h:3025
Contains the configuration of a 3d axis.
void extentChanged()
Emitted when the 3d view's 2d extent has changed.
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 settingsChanged()
Emitted when one of the configuration settings has changed.
void renderersChanged()
Emitted when the list of map's extra renderers have been modified.
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.
const QgsPathResolver & pathResolver() const
Returns the path resolver for conversion between relative and absolute paths during rendering operati...
bool showExtentIn2DView() const
Returns whether the extent is displayed on the main 2D map canvas.
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.
Qgis::NavigationMode cameraNavigationMode() const
Returns the navigation mode used by the camera.
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 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.
void pointLightsChanged()
Emitted when the list of point lights changes.
double debugDepthMapSize() const
Returns the size of the shadow map preview.
Qgs3DAxisSettings get3DAxisSettings() const
Returns the current configuration of 3d axis.
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.
QgsAmbientOcclusionSettings ambientOcclusionSettings() const
Returns the current configuration of screen space ambient occlusion.
QgsRectangle extent() const
Returns the 3D scene's 2D extent in the 3D scene's CRS.
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)
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.
QgsTerrainGenerator * terrainGenerator() const
Returns the terrain generator.
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.
Qgs3DMapSettings & operator=(Qgs3DMapSettings const &)=delete
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...
void ambientOcclusionSettingsChanged()
Emitted when ambient occlusion rendering settings are changed.
bool showTerrainTilesInfo() const
Returns whether to display extra tile info on top of terrain tiles (for debugging)
void showExtentIn2DViewChanged()
Emitted when the parameter to display 3d view's extent in the 2D canvas has changed.
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.
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.
QgsMapThemeCollection * mapThemeCollection() const
Returns pointer to the collection of map themes.
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.
class containing the configuration of ambient occlusion rendering 3
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:75
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:107
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.
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.
Class for storage of 3D vectors similar to QVector3D, with the difference that it uses double precisi...
Definition qgsvector3d.h:31
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_TRANSFER
Definition qgis_sip.h:36
const QgsCoordinateReferenceSystem & crs