QGIS API Documentation 3.30.0-'s-Hertogenbosch (f186b8efe0)
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
52class _3D_EXPORT Qgs3DMapSettings : public QObject, public QgsTemporalRangeObject
53{
54 Q_OBJECT
55 public:
59 Qgs3DMapSettings( const Qgs3DMapSettings &other );
60 ~Qgs3DMapSettings() override;
61
63
65 void readXml( const QDomElement &elem, const QgsReadWriteContext &context );
67 QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const;
69 void resolveReferences( const QgsProject &project );
70
75 QgsRectangle extent() const { return mExtent; }
76
85 void setExtent( const QgsRectangle &extent );
86
98 void setOrigin( const QgsVector3D &origin ) { mOrigin = origin; }
100 QgsVector3D origin() const { return mOrigin; }
101
103 QgsVector3D mapToWorldCoordinates( const QgsVector3D &mapCoords ) const;
105 QgsVector3D worldToMapCoordinates( const QgsVector3D &worldCoords ) const;
106
108 void setCrs( const QgsCoordinateReferenceSystem &crs );
110 QgsCoordinateReferenceSystem crs() const { return mCrs; }
111
119 QgsCoordinateTransformContext transformContext() const;
120
128 void setTransformContext( const QgsCoordinateTransformContext &context );
129
137 const QgsPathResolver &pathResolver() const { return mPathResolver; }
138
146 void setPathResolver( const QgsPathResolver &resolver ) { mPathResolver = resolver; }
147
154 QgsMapThemeCollection *mapThemeCollection() const { return mMapThemes; }
155
161 void setMapThemeCollection( QgsMapThemeCollection *mapThemes ) { mMapThemes = mapThemes; }
162
164 void setBackgroundColor( const QColor &color );
166 QColor backgroundColor() const;
167
169 void setSelectionColor( const QColor &color );
171 QColor selectionColor() const;
172
181 void setLayers( const QList<QgsMapLayer *> &layers );
182
191 QList<QgsMapLayer *> layers() const;
192
193 //
194 // terrain related config
195 //
196
202 void configureTerrainFromProject( QgsProjectElevationProperties *properties, const QgsRectangle &fullExtent ) SIP_SKIP;
203
208 void setTerrainVerticalScale( double zScale );
210 double terrainVerticalScale() const;
211
216 void setMapTileResolution( int res );
217
222 int mapTileResolution() const;
223
228 void setMaxTerrainScreenError( float error );
229
237 float maxTerrainScreenError() const;
238
243 void setMaxTerrainGroundError( float error );
244
251 float maxTerrainGroundError() const;
252
258 void setTerrainElevationOffset( float offset );
259
263 float terrainElevationOffset() const { return mTerrainElevationOffset; }
264
277 void setTerrainGenerator( QgsTerrainGenerator *gen SIP_TRANSFER ) SIP_SKIP;
278
290 {
291 return mTerrainGenerator.get();
292 }
293
299 void setTerrainShadingEnabled( bool enabled );
300
307 bool isTerrainShadingEnabled() const { return mTerrainShadingEnabled; }
308
314 void setTerrainShadingMaterial( const QgsPhongMaterialSettings &material );
315
321 QgsPhongMaterialSettings terrainShadingMaterial() const { return mTerrainShadingMaterial; }
322
328 void setTerrainMapTheme( const QString &theme );
329
336 QString terrainMapTheme() const { return mTerrainMapTheme; }
337
338 //
339 // misc configuration
340 //
341
343 void setRenderers( const QList<QgsAbstract3DRenderer *> &renderers SIP_TRANSFER );
345 QList<QgsAbstract3DRenderer *> renderers() const { return mRenderers; }
346
348 void setShowTerrainBoundingBoxes( bool enabled );
350 bool showTerrainBoundingBoxes() const { return mShowTerrainBoundingBoxes; }
352 void setShowTerrainTilesInfo( bool enabled );
354 bool showTerrainTilesInfo() const { return mShowTerrainTileInfo; }
355
360 void setShowCameraViewCenter( bool enabled );
361
366 bool showCameraViewCenter() const { return mShowCameraViewCenter; }
367
372 void setShowCameraRotationCenter( bool enabled );
373
378 bool showCameraRotationCenter() const { return mShowCameraRotationCenter; }
379
384 void setShowLightSourceOrigins( bool enabled );
385
390 bool showLightSourceOrigins() const { return mShowLightSources; }
391
393 void setShowLabels( bool enabled );
395 bool showLabels() const { return mShowLabels; }
396
402 void setEyeDomeLightingEnabled( bool enabled );
404 bool eyeDomeLightingEnabled() const { return mEyeDomeLightingEnabled; }
405
411 void setEyeDomeLightingStrength( double strength );
413 double eyeDomeLightingStrength() const { return mEyeDomeLightingStrength; }
414
420 void setEyeDomeLightingDistance( int distance );
422 int eyeDomeLightingDistance() const { return mEyeDomeLightingDistance; }
423
429 void setDebugShadowMapSettings( bool enabled, Qt::Corner corner, double size );
431 bool debugShadowMapEnabled() const { return mDebugShadowMapEnabled; }
433 Qt::Corner debugShadowMapCorner() const { return mDebugShadowMapCorner; }
435 double debugShadowMapSize() const { return mDebugShadowMapSize; }
436
442 void setDebugDepthMapSettings( bool enabled, Qt::Corner corner, double size );
444 bool debugDepthMapEnabled() const { return mDebugDepthMapEnabled; }
446 Qt::Corner debugDepthMapCorner() const { return mDebugDepthMapCorner; }
448 double debugDepthMapSize() const { return mDebugDepthMapSize; }
449
455 QList<QgsLightSource *> lightSources() const;
456
465 void setLightSources( const QList<QgsLightSource *> &lights SIP_TRANSFER );
466
471 float fieldOfView() const { return mFieldOfView; }
472
477 void setFieldOfView( const float fieldOfView );
478
483 Qt3DRender::QCameraLens::ProjectionType projectionType() const SIP_SKIP { return mProjectionType; }
484
489 void setProjectionType( const Qt3DRender::QCameraLens::ProjectionType projectionType ) SIP_SKIP;
490
491#ifndef SIP_RUN
492
497 Qgis::NavigationMode cameraNavigationMode() const { return mCameraNavigationMode; }
498
503 void setCameraNavigationMode( Qgis::NavigationMode navigationMode );
504#endif
505
510 double cameraMovementSpeed() const { return mCameraMovementSpeed; }
511
516 void setCameraMovementSpeed( double movementSpeed );
517
523 void setOutputDpi( const double dpi ) {mDpi = dpi;}
524
525
531 double outputDpi() const { return mDpi; }
532
537 QgsSkyboxSettings skyboxSettings() const SIP_SKIP { return mSkyboxSettings; }
538
543 QgsShadowSettings shadowSettings() const SIP_SKIP { return mShadowSettings; }
544
549 QgsAmbientOcclusionSettings ambientOcclusionSettings() const SIP_SKIP { return mAmbientOcclusionSettings; }
550
555 void setSkyboxSettings( const QgsSkyboxSettings &skyboxSettings ) SIP_SKIP;
556
561 void setShadowSettings( const QgsShadowSettings &shadowSettings ) SIP_SKIP;
562
567 void setAmbientOcclusionSettings( const QgsAmbientOcclusionSettings &ambientOcclusionSettings ) SIP_SKIP;
568
574 bool isSkyboxEnabled() const { return mIsSkyboxEnabled; }
575
581 void setIsSkyboxEnabled( bool enabled ) { mIsSkyboxEnabled = enabled; }
582
588 bool isFpsCounterEnabled() const { return mIsFpsCounterEnabled; }
589
595 void setIsFpsCounterEnabled( bool fpsCounterEnabled );
596
602 bool terrainRenderingEnabled() const { return mTerrainRenderingEnabled; }
603
609 void setTerrainRenderingEnabled( bool terrainRenderingEnabled );
610
617 Qgis::RendererUsage rendererUsage() const;
618
625 void setRendererUsage( Qgis::RendererUsage rendererUsage );
626
632 Qgis::ViewSyncModeFlags viewSyncMode() const { return mViewSyncMode; }
633
639 void setViewSyncMode( Qgis::ViewSyncModeFlags mode );
640
646 bool viewFrustumVisualizationEnabled() const { return mVisualizeViewFrustum; }
647
653 void setViewFrustumVisualizationEnabled( bool enabled );
654
659 Qgs3DAxisSettings get3DAxisSettings() const SIP_SKIP { return m3dAxisSettings; }
660
665 void set3DAxisSettings( const Qgs3DAxisSettings &axisSettings, bool force = false ) SIP_SKIP;
666
672 bool isDebugOverlayEnabled() const { return mIsDebugOverlayEnabled; }
673
682 void setIsDebugOverlayEnabled( bool debugOverlayEnabled );
683
684 signals:
685
692
697
705
716
721 void terrainElevationOffsetChanged( float newElevation );
722
728
734
740
745
751
757
763
766
772
778
784
790
796
802
808
814
820
826
832
838
844
850
851
857
862 void fpsCounterEnabledChanged( bool fpsCounterEnabled );
863
870
876
881 void debugOverlayEnabledChanged( bool debugOverlayEnabled );
882
889
890 private:
891#ifdef SIP_RUN
892 Qgs3DMapSettings &operator=( const Qgs3DMapSettings & );
893#endif
894
895 private:
897 void connectChangedSignalsToSettingsChanged();
898
899 private:
901 QgsVector3D mOrigin;
903 QColor mBackgroundColor = Qt::black;
904 QColor mSelectionColor;
905 double mTerrainVerticalScale = 1;
906 std::unique_ptr<QgsTerrainGenerator> mTerrainGenerator;
907 int mMapTileResolution = 512;
908 float mMaxTerrainScreenError = 3.f;
909 float mMaxTerrainGroundError = 1.f;
910 float mTerrainElevationOffset = 0.0f;
911 bool mTerrainShadingEnabled = false;
912 QgsPhongMaterialSettings mTerrainShadingMaterial;
913 QString mTerrainMapTheme;
914 bool mShowTerrainBoundingBoxes = false;
915 bool mShowTerrainTileInfo = false;
916 bool mShowCameraViewCenter = false;
917 bool mShowCameraRotationCenter = false;
918 bool mShowLightSources = false;
919 bool mShowLabels = false;
920 QList< QgsLightSource * > mLightSources;
921 float mFieldOfView = 45.0f; //<! Camera lens field of view value
922 Qt3DRender::QCameraLens::ProjectionType mProjectionType = Qt3DRender::QCameraLens::PerspectiveProjection; //<! Camera lens projection type
924 double mCameraMovementSpeed = 5.0;
925 QList<QgsMapLayerRef> mLayers;
926 QList<QgsAbstract3DRenderer *> mRenderers;
928 QgsCoordinateTransformContext mTransformContext;
929 QgsPathResolver mPathResolver;
930 QgsMapThemeCollection *mMapThemes = nullptr;
931 double mDpi = 96;
932 bool mIsFpsCounterEnabled = false;
933
934 bool mIsSkyboxEnabled = false;
935 QgsSkyboxSettings mSkyboxSettings;
936 QgsShadowSettings mShadowSettings;
937 QgsAmbientOcclusionSettings mAmbientOcclusionSettings;
938
939 bool mEyeDomeLightingEnabled = false;
940 double mEyeDomeLightingStrength = 1000.0;
941 int mEyeDomeLightingDistance = 1;
942
943 Qgis::ViewSyncModeFlags mViewSyncMode;
944 bool mVisualizeViewFrustum = false;
945
946 bool mDebugShadowMapEnabled = false;
947 Qt::Corner mDebugShadowMapCorner = Qt::Corner::TopLeftCorner;
948 double mDebugShadowMapSize = 0.2;
949
950 bool mDebugDepthMapEnabled = false;
951 Qt::Corner mDebugDepthMapCorner = Qt::Corner::TopRightCorner;
952 double mDebugDepthMapSize = 0.2;
953
954 bool mTerrainRenderingEnabled = true;
955
956 Qgis::RendererUsage mRendererUsage;
957
958 Qgs3DAxisSettings m3dAxisSettings;
959
960 bool mIsDebugOverlayEnabled = false;
961
962 QgsRectangle mExtent;
963
964};
965
966
967#endif // QGS3DMAPSETTINGS_H
NavigationMode
The navigation mode used by 3D cameras.
Definition: qgis.h:2421
@ TerrainBased
The default navigation based on the terrain.
RendererUsage
Usage of the renderer.
Definition: qgis.h:2205
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...
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.
QList< QgsAbstract3DRenderer * > renderers() const
Returns list of extra 3D renderers.
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 project'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 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: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:105
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