38#include <QDomDocument>
42#include "moc_qgs3dmapsettings.cpp"
44using namespace Qt::StringLiterals;
50 connectChangedSignalsToSettingsChanged();
51 mTerrainSettings = std::make_unique<QgsFlatTerrainSettings>();
57 , mOrigin( other.mOrigin )
59 , mBackgroundColor( other.mBackgroundColor )
60 , mSelectionColor( other.mSelectionColor )
61 , mTerrainShadingEnabled( other.mTerrainShadingEnabled )
62 , mTerrainShadingMaterial( other.mTerrainShadingMaterial )
63 , mTerrainMapTheme( other.mTerrainMapTheme )
64 , mDebugFlags( other.mDebugFlags )
65 , mShowLabels( other.mShowLabels )
66 , mStopUpdates( other.mStopUpdates )
67 , mFieldOfView( other.mFieldOfView )
68 , mProjectionType( other.mProjectionType )
69 , mCameraNavigationMode( other.mCameraNavigationMode )
70 , mCameraMovementSpeed( other.mCameraMovementSpeed )
71 , mLayers( other.mLayers )
72 , mTransformContext( other.mTransformContext )
73 , mPathResolver( other.mPathResolver )
74 , mMapThemes( other.mMapThemes )
76 , mShadowSettings( other.mShadowSettings )
77 , mAmbientOcclusionSettings( other.mAmbientOcclusionSettings )
78 , mBloomSettings( other.mBloomSettings )
79 , mColorGradingSettings( other.mColorGradingSettings )
80 , mEyeDomeLightingEnabled( other.mEyeDomeLightingEnabled )
81 , mEyeDomeLightingStrength( other.mEyeDomeLightingStrength )
82 , mEyeDomeLightingDistance( other.mEyeDomeLightingDistance )
83 , mMsaaEnabled( other.mMsaaEnabled )
84 , mTextureFilterQuality( other.mTextureFilterQuality )
85 , mViewSyncMode( other.mViewSyncMode )
86 , mVisualizeViewFrustum( other.mVisualizeViewFrustum )
87 , mTerrainRenderingEnabled( other.mTerrainRenderingEnabled )
88 , mRendererUsage( other.mRendererUsage )
89 , m3dAxisSettings( other.m3dAxisSettings )
90 , mIsDebugOverlayEnabled( other.mIsDebugOverlayEnabled )
91 , mExtent( other.mExtent )
92 , mShowExtentIn2DView( other.mShowExtentIn2DView )
93 , mShow2DMapOverlay( other.mShow2DMapOverlay )
97 if ( other.mBackgroundSettings )
98 mBackgroundSettings.reset( other.mBackgroundSettings->clone() );
100 for (
QgsLightSource *source : std::as_const( other.mLightSources ) )
103 mLightSources << source->clone();
107 connectChangedSignalsToSettingsChanged();
112 qDeleteAll( mLightSources );
120 QDomElement elemOrigin = elem.firstChildElement( u
"origin"_s );
123 elemOrigin.attribute( u
"x"_s ).toDouble(),
124 elemOrigin.attribute( u
"y"_s ).toDouble(),
125 elemOrigin.attribute( u
"z"_s ).toDouble()
129 QDomElement elemExtent = elem.firstChildElement( u
"extent"_s );
130 if ( !elemExtent.isNull() )
134 elemExtent.attribute( u
"xMin"_s ).toDouble(),
135 elemExtent.attribute( u
"yMin"_s ).toDouble(),
136 elemExtent.attribute( u
"xMax"_s ).toDouble(),
137 elemExtent.attribute( u
"yMax"_s ).toDouble()
141 mShowExtentIn2DView = elemExtent.attribute( u
"showIn2dView"_s, u
"0"_s ).toInt();
148 QDomElement elemCamera = elem.firstChildElement( u
"camera"_s );
149 if ( !elemCamera.isNull() )
151 mFieldOfView = elemCamera.attribute( u
"field-of-view"_s, u
"45"_s ).toDouble();
152 mProjectionType =
static_cast<Qt3DRender::QCameraLens::ProjectionType
>( elemCamera.attribute( u
"projection-type"_s, u
"1"_s ).toInt() );
153 QString
cameraNavigationMode = elemCamera.attribute( u
"camera-navigation-mode"_s, u
"basic-navigation"_s );
160 mCameraMovementSpeed = elemCamera.attribute( u
"camera-movement-speed"_s, u
"5.0"_s ).toDouble();
163 QDomElement elemColor = elem.firstChildElement( u
"color"_s );
164 if ( !elemColor.isNull() )
170 QDomElement elemCrs = elem.firstChildElement( u
"crs"_s );
171 mCrs.readXml( elemCrs );
173 QDomElement elemTerrain = elem.firstChildElement( u
"terrain"_s );
174 mTerrainRenderingEnabled = elemTerrain.attribute( u
"terrain-rendering-enabled"_s, u
"1"_s ).toInt();
175 mTerrainShadingEnabled = elemTerrain.attribute( u
"shading-enabled"_s, u
"0"_s ).toInt();
177 QDomElement elemTerrainShadingMaterial = elemTerrain.firstChildElement( u
"shading-material"_s );
178 if ( !elemTerrainShadingMaterial.isNull() )
179 mTerrainShadingMaterial.readXml( elemTerrainShadingMaterial, context );
180 mTerrainMapTheme = elemTerrain.attribute( u
"map-theme"_s );
181 mShowLabels = elemTerrain.attribute( u
"show-labels"_s, u
"0"_s ).toInt();
183 qDeleteAll( mLightSources );
184 mLightSources.clear();
185 const QDomElement lightsElem = elem.firstChildElement( u
"lights"_s );
186 if ( !lightsElem.isNull() )
188 const QDomNodeList lightNodes = lightsElem.childNodes();
189 for (
int i = 0; i < lightNodes.size(); ++i )
191 const QDomElement lightElement = lightNodes.at( i ).toElement();
193 mLightSources << light;
199 QDomElement elemPointLights = elem.firstChildElement( u
"point-lights"_s );
200 if ( !elemPointLights.isNull() )
202 QDomElement elemPointLight = elemPointLights.firstChildElement( u
"point-light"_s );
203 while ( !elemPointLight.isNull() )
205 auto pointLight = std::make_unique<QgsPointLightSettings>();
206 pointLight->readXml( elemPointLight, context );
207 mLightSources << pointLight.release();
208 elemPointLight = elemPointLight.nextSiblingElement( u
"point-light"_s );
214 auto defaultLight = std::make_unique<QgsPointLightSettings>();
215 defaultLight->setPosition(
QgsVector3D( 0, 1000, 0 ) );
216 mLightSources << defaultLight.release();
219 QDomElement elemDirectionalLights = elem.firstChildElement( u
"directional-lights"_s );
220 if ( !elemDirectionalLights.isNull() )
222 QDomElement elemDirectionalLight = elemDirectionalLights.firstChildElement( u
"directional-light"_s );
223 while ( !elemDirectionalLight.isNull() )
225 auto directionalLight = std::make_unique<QgsDirectionalLightSettings>();
226 directionalLight->readXml( elemDirectionalLight, context );
227 mLightSources << directionalLight.release();
228 elemDirectionalLight = elemDirectionalLight.nextSiblingElement( u
"directional-light"_s );
233 QDomElement elemMapLayers = elemTerrain.firstChildElement( u
"layers"_s );
234 QDomElement elemMapLayer = elemMapLayers.firstChildElement( u
"layer"_s );
235 QList<QgsMapLayerRef> mapLayers;
236 while ( !elemMapLayer.isNull() )
239 elemMapLayer = elemMapLayer.nextSiblingElement( u
"layer"_s );
243 QDomElement elemTerrainGenerator = elemTerrain.firstChildElement( u
"generator"_s );
244 const QString terrainGenType = elemTerrainGenerator.attribute( u
"type"_s );
252 mBackgroundSettings.reset();
253 QDomElement elemBackground = elem.firstChildElement( u
"background"_s );
254 if ( !elemBackground.isNull() )
260 auto skybox = std::make_unique<QgsSkyboxSettings>();
261 skybox->readXml( elemBackground, context );
262 mBackgroundSettings = std::move( skybox );
267 auto gradient = std::make_unique<QgsFixedGradientBackgroundSettings>();
268 gradient->readXml( elemBackground, context );
269 mBackgroundSettings = std::move( gradient );
277 QDomElement elemShadows = elem.firstChildElement( u
"shadow-rendering"_s );
278 mShadowSettings.readXml( elemShadows, context );
280 QDomElement elemAmbientOcclusion = elem.firstChildElement( u
"screen-space-ambient-occlusion"_s );
281 mAmbientOcclusionSettings.readXml( elemAmbientOcclusion, context );
284 QDomElement elemBloom = elem.firstChildElement( u
"bloom"_s );
285 mBloomSettings.readXml( elemBloom, context );
289 QDomElement elemColorGrading = elem.firstChildElement( u
"color-grading"_s );
290 mColorGradingSettings.readXml( elemColorGrading, context );
293 QDomElement elemEyeDomeLighting = elem.firstChildElement( u
"eye-dome-lighting"_s );
294 mEyeDomeLightingEnabled = elemEyeDomeLighting.attribute(
"enabled", u
"0"_s ).toInt();
295 mEyeDomeLightingStrength = elemEyeDomeLighting.attribute(
"eye-dome-lighting-strength", u
"1000.0"_s ).toDouble();
296 mEyeDomeLightingDistance = elemEyeDomeLighting.attribute(
"eye-dome-lighting-distance", u
"1"_s ).toInt();
298 QDomElement elemNavigationSync = elem.firstChildElement( u
"navigation-sync"_s );
299 mViewSyncMode =
static_cast<Qgis::ViewSyncModeFlags>( elemNavigationSync.attribute( u
"view-sync-mode"_s, u
"0"_s ).toInt() );
300 mVisualizeViewFrustum = elemNavigationSync.attribute( u
"view-frustum-visualization-enabled"_s, u
"0"_s ).toInt();
302 QDomElement elemDebugSettings = elem.firstChildElement( u
"debug-settings"_s );
304 mDebugDepthMapEnabled = elemDebugSettings.attribute( u
"depthmap-enabled"_s, u
"0"_s ).toInt();
305 mDebugDepthMapCorner =
static_cast<Qt::Corner
>( elemDebugSettings.attribute( u
"depthmap-corner"_s, u
"1"_s ).toInt() );
306 mDebugDepthMapSize = elemDebugSettings.attribute( u
"depthmap-size"_s, u
"0.2"_s ).toDouble();
308 QDomElement elemDebug = elem.firstChildElement( u
"debug"_s );
310 mStopUpdates = elemDebug.attribute( u
"stop-updates"_s, u
"0"_s ).toInt();
312 QDomElement elemTemporalRange = elem.firstChildElement( u
"temporal-range"_s );
313 QDateTime start = QDateTime::fromString( elemTemporalRange.attribute( u
"start"_s ), Qt::ISODate );
314 QDateTime end = QDateTime::fromString( elemTemporalRange.attribute( u
"end"_s ), Qt::ISODate );
317 QDomElement elem3dAxis = elem.firstChildElement( u
"axis3d"_s );
318 m3dAxisSettings.readXml( elem3dAxis, context );
320 QDomElement elemMapOverlay = elem.firstChildElement( u
"map-overlay"_s );
321 if ( !elemMapOverlay.isNull() )
323 mShow2DMapOverlay = elemMapOverlay.attribute( u
"enabled"_s, u
"0"_s ).toInt();
327 mShow2DMapOverlay =
false;
335 QDomElement elem = doc.createElement( u
"qgis3d"_s );
337 QDomElement elemOrigin = doc.createElement( u
"origin"_s );
338 elemOrigin.setAttribute( u
"x"_s, QString::number( mOrigin.x() ) );
339 elemOrigin.setAttribute( u
"y"_s, QString::number( mOrigin.y() ) );
340 elemOrigin.setAttribute( u
"z"_s, QString::number( mOrigin.z() ) );
341 elem.appendChild( elemOrigin );
343 QDomElement elemExtent = doc.createElement( u
"extent"_s );
344 elemExtent.setAttribute( u
"xMin"_s, mExtent.xMinimum() );
345 elemExtent.setAttribute( u
"yMin"_s, mExtent.yMinimum() );
346 elemExtent.setAttribute( u
"xMax"_s, mExtent.xMaximum() );
347 elemExtent.setAttribute( u
"yMax"_s, mExtent.yMaximum() );
348 elemExtent.setAttribute( u
"showIn2dView"_s, mShowExtentIn2DView );
349 elem.appendChild( elemExtent );
351 QDomElement elemCamera = doc.createElement( u
"camera"_s );
352 elemCamera.setAttribute( u
"field-of-view"_s, mFieldOfView );
353 elemCamera.setAttribute( u
"projection-type"_s,
static_cast<int>( mProjectionType ) );
354 switch ( mCameraNavigationMode )
357 elemCamera.setAttribute( u
"camera-navigation-mode"_s, u
"terrain-based-navigation"_s );
360 elemCamera.setAttribute( u
"camera-navigation-mode"_s, u
"walk-navigation"_s );
363 elemCamera.setAttribute( u
"camera-navigation-mode"_s, u
"globe-terrain-based-navigation"_s );
366 elemCamera.setAttribute( u
"camera-movement-speed"_s, mCameraMovementSpeed );
367 elem.appendChild( elemCamera );
369 QDomElement elemColor = doc.createElement( u
"color"_s );
372 elem.appendChild( elemColor );
374 QDomElement elemCrs = doc.createElement( u
"crs"_s );
375 mCrs.writeXml( elemCrs, doc );
376 elem.appendChild( elemCrs );
378 QDomElement elemTerrain = doc.createElement( u
"terrain"_s );
379 elemTerrain.setAttribute( u
"terrain-rendering-enabled"_s, mTerrainRenderingEnabled ? 1 : 0 );
380 elemTerrain.setAttribute( u
"shading-enabled"_s, mTerrainShadingEnabled ? 1 : 0 );
382 QDomElement elemTerrainShadingMaterial = doc.createElement( u
"shading-material"_s );
383 mTerrainShadingMaterial.writeXml( elemTerrainShadingMaterial, context );
384 elemTerrain.appendChild( elemTerrainShadingMaterial );
385 elemTerrain.setAttribute( u
"map-theme"_s, mTerrainMapTheme );
386 elemTerrain.setAttribute( u
"show-labels"_s, mShowLabels ? 1 : 0 );
389 QDomElement elemLights = doc.createElement( u
"lights"_s );
392 const QDomElement elemLight = light->writeXml( doc, context );
393 elemLights.appendChild( elemLight );
395 elem.appendChild( elemLights );
398 QDomElement elemMapLayers = doc.createElement( u
"layers"_s );
401 QDomElement elemMapLayer = doc.createElement( u
"layer"_s );
402 elemMapLayer.setAttribute( u
"id"_s, layerRef.layerId );
403 elemMapLayers.appendChild( elemMapLayer );
405 elemTerrain.appendChild( elemMapLayers );
407 QDomElement elemTerrainGenerator = doc.createElement( u
"generator"_s );
408 elemTerrainGenerator.setAttribute( u
"type"_s, mTerrainSettings->type() );
409 mTerrainSettings->writeXml( elemTerrain, context );
410 elemTerrain.appendChild( elemTerrainGenerator );
411 elem.appendChild( elemTerrain );
413 if ( mBackgroundSettings )
415 QDomElement elemBackground = doc.createElement( u
"background"_s );
416 elemBackground.setAttribute( u
"type"_s,
qgsEnumValueToKey( mBackgroundSettings->type() ) );
417 mBackgroundSettings->writeXml( elemBackground, context );
418 elem.appendChild( elemBackground );
421 QDomElement elemShadows = doc.createElement( u
"shadow-rendering"_s );
422 mShadowSettings.writeXml( elemShadows, context );
423 elem.appendChild( elemShadows );
425 QDomElement elemAmbientOcclusion = doc.createElement( u
"screen-space-ambient-occlusion"_s );
426 mAmbientOcclusionSettings.writeXml( elemAmbientOcclusion, context );
427 elem.appendChild( elemAmbientOcclusion );
430 QDomElement elemBloom = doc.createElement( u
"bloom"_s );
431 mBloomSettings.writeXml( elemBloom, context );
432 elem.appendChild( elemBloom );
436 QDomElement elemColorGrading = doc.createElement( u
"color-grading"_s );
437 mColorGradingSettings.writeXml( elemColorGrading, context );
438 elem.appendChild( elemColorGrading );
441 QDomElement elemDebug = doc.createElement( u
"debug"_s );
443 elemDebug.setAttribute( u
"stop-updates"_s, mStopUpdates ? 1 : 0 );
444 elem.appendChild( elemDebug );
446 QDomElement elemEyeDomeLighting = doc.createElement( u
"eye-dome-lighting"_s );
447 elemEyeDomeLighting.setAttribute( u
"enabled"_s, mEyeDomeLightingEnabled ? 1 : 0 );
448 elemEyeDomeLighting.setAttribute( u
"eye-dome-lighting-strength"_s, mEyeDomeLightingStrength );
449 elemEyeDomeLighting.setAttribute( u
"eye-dome-lighting-distance"_s, mEyeDomeLightingDistance );
450 elem.appendChild( elemEyeDomeLighting );
452 QDomElement elemNavigationSync = doc.createElement( u
"navigation-sync"_s );
453 elemNavigationSync.setAttribute( u
"view-sync-mode"_s, (
int ) mViewSyncMode );
454 elemNavigationSync.setAttribute( u
"view-frustum-visualization-enabled"_s, mVisualizeViewFrustum ? 1 : 0 );
455 elem.appendChild( elemNavigationSync );
457 QDomElement elemDebugSettings = doc.createElement( u
"debug-settings"_s );
458 elemDebugSettings.setAttribute( u
"depthmap-enabled"_s, mDebugDepthMapEnabled );
459 elemDebugSettings.setAttribute( u
"depthmap-corner"_s, mDebugDepthMapCorner );
460 elemDebugSettings.setAttribute( u
"depthmap-size"_s, mDebugDepthMapSize );
461 elem.appendChild( elemDebugSettings );
463 QDomElement elemTemporalRange = doc.createElement( u
"temporal-range"_s );
464 elemTemporalRange.setAttribute( u
"start"_s,
temporalRange().begin().toString( Qt::ISODate ) );
465 elemTemporalRange.setAttribute( u
"end"_s,
temporalRange().end().toString( Qt::ISODate ) );
467 QDomElement elem3dAxis = doc.createElement( u
"axis3d"_s );
468 m3dAxisSettings.writeXml( elem3dAxis, context );
469 elem.appendChild( elem3dAxis );
471 if ( mShow2DMapOverlay )
473 QDomElement elemMapOverlay = doc.createElement( u
"map-overlay"_s );
474 elemMapOverlay.setAttribute( u
"enabled"_s, 1 );
475 elem.appendChild( elemMapOverlay );
485 for (
int i = 0; i < mLayers.count(); ++i )
491 if ( mTerrainSettings )
493 mTerrainSettings->resolveReferences( &project );
510 QgsDebugError( u
"extent() should not be used with globe!"_s );
525 QgsDebugError( u
"setExtent() should not be used with globe!"_s );
531 if ( mTerrainGenerator )
534 mTerrainGenerator->setExtent( terrainExtent );
606 return mTransformContext;
613 mTransformContext = context;
620 return mPathResolver;
627 mPathResolver = resolver;
641 mMapThemes = mapThemes;
648 if ( color == mBackgroundColor )
651 mBackgroundColor = color;
659 return mBackgroundColor;
666 return mBackgroundSettings.get();
673 mBackgroundSettings.reset( settings );
681 if ( color == mSelectionColor )
684 mSelectionColor = color;
692 return mSelectionColor;
699 if ( zScale == mTerrainSettings->verticalScale() )
702 mTerrainSettings->setVerticalScale( zScale );
713 return mTerrainSettings->verticalScale();
720 const QList<QgsMapLayer *> raw = _qgis_listRefToRaw( mLayers );
725 mLayers = _qgis_listRawToRef(
layers );
733 QList<QgsMapLayer *> lst;
734 lst.reserve( mLayers.count() );
737 if ( layerRef.layer )
738 lst.append( layerRef.layer );
760 return mTerrainSettings.get();
767 bool hasChanged =
false;
768 if ( settings == mTerrainSettings.get() )
776 hasChanged = !settings->
equals( mTerrainSettings.get() ) || !mTerrainGenerator;
777 mTerrainSettings.reset( settings );
805 if ( mTerrainSettings->mapTileResolution() == res )
808 mTerrainSettings->setMapTileResolution( res );
819 return mTerrainSettings->mapTileResolution();
826 if ( mTerrainSettings->maximumScreenError() == error )
829 mTerrainSettings->setMaximumScreenError( error );
840 return mTerrainSettings->maximumScreenError();
847 if ( mTerrainSettings->maximumGroundError() == error )
850 mTerrainSettings->setMaximumGroundError( error );
862 if ( mTerrainSettings->elevationOffset() == offset )
864 mTerrainSettings->setElevationOffset( offset );
875 return mTerrainSettings->elevationOffset();
882 return mTerrainSettings->maximumGroundError();
889 if ( mTerrainGenerator )
899 mTerrainGenerator.reset( gen );
909 return mTerrainGenerator.get();
916 if ( mTerrainShadingEnabled == enabled )
919 mTerrainShadingEnabled = enabled;
927 return mTerrainShadingEnabled;
934 if ( mTerrainShadingMaterial == material )
937 mTerrainShadingMaterial = material;
945 return mTerrainShadingMaterial;
952 if ( mTerrainMapTheme == theme )
955 mTerrainMapTheme = theme;
963 return mTerrainMapTheme;
970 if ( mDebugFlags == flags )
982 if ( hasShowTerrainBoundingBoxesChanged )
986 if ( hasShowTerrainTileInfoChanged )
990 if ( hasShowCameraViewCenterChanged )
994 if ( hasShowCameraRotationCenterChanged )
998 if ( hasShowLightSourcesChanged )
1002 if ( hasShowFpsChanged )
1006 if ( hasShowDebugPanelChanged )
1098 if ( mShowLabels == enabled )
1101 mShowLabels = enabled;
1116 if ( mStopUpdates == enabled )
1119 mStopUpdates = enabled;
1127 return mStopUpdates;
1134 if ( mEyeDomeLightingEnabled == enabled )
1136 mEyeDomeLightingEnabled = enabled;
1144 return mEyeDomeLightingEnabled;
1151 if ( mEyeDomeLightingStrength == strength )
1153 mEyeDomeLightingStrength = strength;
1161 return mEyeDomeLightingStrength;
1168 if ( mEyeDomeLightingDistance == distance )
1170 mEyeDomeLightingDistance = distance;
1178 return mEyeDomeLightingDistance;
1185 if ( mMsaaEnabled == enabled )
1188 mMsaaEnabled = enabled;
1196 return mMsaaEnabled;
1203 return mLightSources;
1211 if ( mLightSources.count() == lights.count() )
1214 for (
int i = 0; i < mLightSources.count(); ++i )
1216 if ( mLightSources[i]->type() == lights[i]->type() )
1218 switch ( mLightSources[i]->type() )
1239 qDeleteAll( lights );
1244 qDeleteAll( mLightSources );
1245 mLightSources = lights;
1256 return mFieldOfView;
1274 return mProjectionType;
1292 return mCameraNavigationMode;
1299 if ( mCameraNavigationMode == navigationMode )
1302 mCameraNavigationMode = navigationMode;
1310 return mCameraMovementSpeed;
1317 if ( mCameraMovementSpeed == movementSpeed )
1320 mCameraMovementSpeed = movementSpeed;
1351 return mShadowSettings;
1358 return mAmbientOcclusionSettings;
1365 return mBloomSettings;
1372 return mColorGradingSettings;
1402 mBloomSettings = settings;
1410 mColorGradingSettings = settings;
1463 return Qt::Corner::TopLeftCorner;
1475 mDebugDepthMapEnabled = enabled;
1476 mDebugDepthMapCorner = corner;
1477 mDebugDepthMapSize = size;
1485 return mDebugDepthMapEnabled;
1492 return mDebugDepthMapCorner;
1499 return mDebugDepthMapSize;
1514 return mTerrainRenderingEnabled;
1531 return mRendererUsage;
1545 return mViewSyncMode;
1552 mViewSyncMode = mode;
1559 return mVisualizeViewFrustum;
1566 if ( mVisualizeViewFrustum != enabled )
1568 mVisualizeViewFrustum = enabled;
1577 return m3dAxisSettings;
1584 if ( debugOverlayEnabled == mIsDebugOverlayEnabled )
1587 mIsDebugOverlayEnabled = debugOverlayEnabled;
1595 return mShowExtentIn2DView;
1598void Qgs3DMapSettings::connectChangedSignalsToSettingsChanged()
1639 if ( axisSettings == m3dAxisSettings )
1651 m3dAxisSettings = axisSettings;
1660 return mIsDebugOverlayEnabled;
1667 if ( show == mShowExtentIn2DView )
1670 mShowExtentIn2DView = show;
1678 return mShow2DMapOverlay;
1685 if ( mShow2DMapOverlay == enabled )
1688 mShow2DMapOverlay = enabled;
@ DistinctTextureSkybox
Skybox with 6 distinct textures for different faces.
@ NoBackground
No background.
@ FixedGradientBackground
Two color gradient, fixed in place.
@ ShowLightSourceOrigins
Shows the light source origins as a sphere.
@ ShowDebugPanel
Shows the debug panel next to the map.
@ ShowTerrainTileInfo
Displays extra tile info on top of terrain tiles.
@ ShowCameraViewCenter
Shows the camera's view center as a sphere.
@ ShowFPS
Shows the frames per second (FPS).
@ ShowCameraRotationCenter
Shows the camera's rotation center as a sphere.
@ ShowTerrainBoundingBoxes
Displays bounding boxes of terrain tiles.
@ Geocentric
Geocentric CRS.
QFlags< ViewSyncModeFlag > ViewSyncModeFlags
NavigationMode
The navigation mode used by 3D cameras.
@ TerrainBased
The default navigation based on the terrain.
@ Walk
Uses WASD keys or arrows to navigate in walking (first person) manner.
@ GlobeTerrainBased
Navigation similar to TerrainBased, but for use with globe.
QFlags< Map3DDebugFlag > Map3DDebugFlags
RendererUsage
Usage of the renderer.
SceneMode
The 3D scene mode used in 3D map views.
@ Globe
Scene is represented as a globe using a geocentric CRS.
@ Local
Local scene based on a projected CRS.
@ Point
Point light source.
@ Directional
Directional light source.
@ Sun
Sun based light source.
Contains the configuration of a 3d axis.
void extentChanged()
Emitted when the 3d view's 2d extent has changed.
void setEyeDomeLightingStrength(double strength)
Sets the eye dome lighting strength value.
bool isDebugOverlayEnabled() const
Returns whether debug overlay is enabled.
Qt::Corner debugDepthMapCorner() const
Returns the corner where the shadow map preview is displayed.
void originChanged()
Emitted when the world's origin point has been shifted.
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the coordinate transform context, which stores various information regarding which datum transfo...
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 setColorGradingSettings(const QgsColorGradingSettings &settings)
Sets the current color grading settings.
void eyeDomeLightingDistanceChanged()
Emitted when the eye dome lighting distance has changed.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context)
Reads configuration from a DOM element previously written by writeXml().
void terrainShadingChanged()
Emitted when terrain shading enabled flag or terrain shading material has changed.
bool isMsaaEnabled() const
Returns whether multisample anti-aliasing (MSAA) is enabled.
const QgsPathResolver & pathResolver() const
Returns the path resolver for conversion between relative and absolute paths during rendering operati...
void setAmbientOcclusionSettings(const QgsAmbientOcclusionSettings &ambientOcclusionSettings)
Sets the current configuration of screen space ambient occlusion.
void bloomSettingsChanged()
Emitted when the bloom lighting effect settings are changed.
Q_DECL_DEPRECATED void setShowTerrainTilesInfo(bool enabled)
Sets whether to display extra tile info on top of terrain tiles (for debugging).
QgsVector3D mapToWorldCoordinates(const QgsVector3D &mapCoords) const
Converts map coordinates to 3D world coordinates (applies offset and turns (x,y,z) into (x,...
bool showExtentIn2DView() const
Returns whether the extent is displayed on the main 2D map canvas.
double cameraMovementSpeed() const
Returns the camera movement speed.
QgsBloomSettings bloomSettings() const
Returns the current configuration of the bloom lighting effect.
Qt3DRender::QCameraLens::ProjectionType projectionType() const
Returns the camera lens' projection type.
void setEyeDomeLightingEnabled(bool enabled)
Sets whether eye dome lighting will be used.
void showDebugPanelChanged(bool shown)
Emitted when the Show debug panel checkbox changes value.
bool debugDepthMapEnabled() const
Returns whether the shadow map debugging is enabled.
Q_DECL_DEPRECATED bool isSkyboxEnabled() const
Returns whether the skybox is enabled.
void debugDepthMapSettingsChanged()
Emitted when depth map debugging has changed.
Q_DECL_DEPRECATED double terrainElevationOffset() const
Returns the elevation offset of the terrain (used to move the terrain up or down).
void setLightSources(const QList< QgsLightSource * > &lights)
Sets the list of light sources defined in the scene.
void backgroundSettingsChanged()
Emitted when background settings are 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.
Q_DECL_DEPRECATED void setMaxTerrainGroundError(double error)
Sets the maximum ground error of terrain tiles in world units.
Q_DECL_DEPRECATED void terrainElevationOffsetChanged(double newElevation)
Emitted when the terrain elevation offset is changed.
Q_DECL_DEPRECATED 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.
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context) const
Writes configuration to a DOM element, to be used later with readXml().
void setDebugDepthMapSettings(bool enabled, Qt::Corner corner, double size)
Sets the debugging settings of the depth map.
Q_DECL_DEPRECATED 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.
QColor selectionColor() const
Returns color used for selected features.
void directionalLightsChanged()
Emitted when the list of directional lights changes.
void setTerrainShadingMaterial(const QgsPhongMaterialSettings &material)
Sets terrain shading material.
const QgsAbstractTerrainSettings * terrainSettings() const
Returns the terrain settings.
Q_DECL_DEPRECATED void maxTerrainScreenErrorChanged()
Emitted when the maximum terrain screen error has changed.
void cameraNavigationModeChanged()
Emitted when the camera navigation mode was changed.
void shadowSettingsChanged()
Emitted when shadow rendering settings are changed.
void show2DMapOverlayChanged()
Emitted when the 2D map overlay is enabled or disabled.
bool stopUpdates() const
Returns whether the scene updates on camera movement.
void setViewFrustumVisualizationEnabled(bool enabled)
Sets whether the camera's view frustum is visualized on the 2D map canvas.
Q_DECL_DEPRECATED void setShowCameraRotationCenter(bool enabled)
Sets whether to show camera's rotation center as a sphere (for debugging).
void setExtent(const QgsRectangle &extent)
Sets the 3D scene's 2D extent in the 3D scene's CRS, while also setting the scene's origin to the ext...
void eyeDomeLightingEnabledChanged()
Emitted when the flag whether eye dome lighting is used has changed.
Q_DECL_DEPRECATED void setTerrainVerticalScale(double zScale)
Sets vertical scale (exaggeration) of terrain (1 = true scale, > 1 = hills get more pronounced).
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 setFieldOfView(double fieldOfView)
Sets the camera lens' field of view.
Q_DECL_DEPRECATED void setIsSkyboxEnabled(bool enabled)
Sets whether the skybox is enabled.
Qgis::SceneMode sceneMode() const
Returns mode of the 3D scene - whether it is represented as a globe (when using Geocentric CRS such a...
void setShowLabels(bool enabled)
Sets whether to display labels on terrain tiles.
Q_DECL_DEPRECATED double terrainVerticalScale() const
Returns vertical scale (exaggeration) of terrain.
void setViewSyncMode(Qgis::ViewSyncModeFlags mode)
Sets the view sync mode (used to synchronize the 2D main map canvas and the 3D camera navigation).
void setOrigin(const QgsVector3D &origin)
Sets coordinates in map CRS at which our 3D world has origin (0,0,0).
void setDebugFlags(Qgis::Map3DDebugFlags flags)
Sets flags that control debugging options for the map.
Q_DECL_DEPRECATED void setSkyboxSettings(const QgsSkyboxSettings &skyboxSettings)
Sets the current configuration of the skybox.
Q_DECL_DEPRECATED void setMapTileResolution(int res)
Sets resolution (in pixels) of the texture of a terrain tile.
void setLayers(const QList< QgsMapLayer * > &layers)
Sets the list of 3D map layers to be rendered in the scene.
Q_DECL_DEPRECATED void setShowDebugPanel(bool enabled)
Sets whether the debug side panel is shown.
QgsShadowSettings shadowSettings() const
Returns the current configuration of shadows.
void terrainMapThemeChanged()
Emitted when terrain's map theme has changed.
void setShadowSettings(const QgsShadowSettings &shadowSettings)
Sets the current configuration of shadow rendering.
void msaaEnabledChanged()
Emitted when the MSAA enabled flag has changed.
void setIsDebugOverlayEnabled(bool debugOverlayEnabled)
Sets whether debug overlay is enabled The debug overlay displays some debugging and profiling informa...
void pointLightsChanged()
Emitted when the list of point lights changes.
QList< QgsLightSource * > lightSources() const
Returns list of directional light sources defined in the scene.
double debugDepthMapSize() const
Returns the size of the shadow map preview.
void setCrs(const QgsCoordinateReferenceSystem &crs)
Sets coordinate reference system used in the 3D scene.
Q_DECL_DEPRECATED double maxTerrainScreenError() const
Returns maximum allowed screen error of terrain tiles in pixels.
void setBackgroundSettings(QgsAbstract3DMapBackgroundSettings *settings)
Sets the background settings for the 3D scene.
Qgs3DAxisSettings get3DAxisSettings() const
Returns the current configuration of 3d axis.
void setEyeDomeLightingDistance(int distance)
Sets the eye dome lighting distance value (contributes to the contrast of the image.
Q_DECL_DEPRECATED void maxTerrainGroundErrorChanged()
Emitted when the maximum terrain ground error has changed.
bool viewFrustumVisualizationEnabled() const
Returns whether the camera's view frustum is visualized on the 2D map canvas.
Q_DECL_DEPRECATED void setShowLightSourceOrigins(bool enabled)
Sets whether to show light source origins as a sphere (for debugging).
Q_DECL_DEPRECATED bool showDebugPanel() const
Returns whether the debug side panel is shown.
double fieldOfView() const
Returns the camera lens' field of view.
bool is2DMapOverlayEnabled() const
Returns whether 2D map overlay is enabled.
void setIs2DMapOverlayEnabled(bool enabled)
Sets whether 2D map overlay is enabled.
void setShowExtentIn2DView(bool show)
Sets whether the extent is displayed on the main 2D map canvas.
void projectionTypeChanged()
Emitted when the camera lens projection type changes.
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.
void setTerrainShadingEnabled(bool enabled)
Sets whether terrain shading is enabled.
Qgis::ViewSyncModeFlags viewSyncMode() const
Returns the view sync mode (used to synchronize the 2D main map canvas and the 3D camera navigation).
Q_DECL_DEPRECATED void mapTileResolutionChanged()
Emitted when the map tile resoulution has changed.
void stopUpdatesChanged()
Emitted when the flag whether to keep updating scene has changed.
QgsColorGradingSettings colorGradingSettings() const
Returns the current color grading settings for the map.
Q_DECL_DEPRECATED void setDebugShadowMapSettings(bool enabled, Qt::Corner corner, double size)
Sets the debugging settings of the shadow map.
void setMsaaEnabled(bool enabled)
Sets whether multisample anti-aliasing (MSAA) is enabled.
int eyeDomeLightingDistance() const
Returns the eye dome lighting distance value (contributes to the contrast of the image).
void setSelectionColor(const QColor &color)
Sets color used for selected features.
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.
const QgsAbstract3DMapBackgroundSettings * backgroundSettings() const
Returns the background settings for the 3D scene, or null if no background is set.
void setCameraNavigationMode(Qgis::NavigationMode navigationMode)
Sets the navigation mode for the camera.
QColor backgroundColor() const
Returns background color of the 3D map view.
void terrainSettingsChanged()
Emitted when the terrain settings are changed.
void resolveReferences(const QgsProject &project)
Resolves references to other objects (map layers) after the call to readXml().
Qgis::Map3DDebugFlags debugFlags() const
Returns the flags that control debugging options for the map.
Q_DECL_DEPRECATED 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...
QgsVector3D worldToMapCoordinates(const QgsVector3D &worldCoords) const
Converts 3D world coordinates to map coordinates (applies offset and turns (x,y,z) into (x,...
Q_DECL_DEPRECATED bool showTerrainBoundingBoxes() const
Returns whether to display bounding boxes of terrain tiles (for debugging).
~Qgs3DMapSettings() override
void showLabelsChanged()
Emitted when the flag whether labels are displayed on terrain tiles has changed.
void setStopUpdates(bool enabled)
Sets whether scene updates on camera movement should be enabled.
Q_DECL_DEPRECATED void setShowCameraViewCenter(bool enabled)
Sets whether to show camera's view center as a sphere (for debugging).
Q_DECL_DEPRECATED int mapTileResolution() const
Returns resolution (in pixels) of the texture of a terrain tile.
bool showLabels() const
Returns whether to display labels on terrain tiles.
void setTerrainSettings(QgsAbstractTerrainSettings *settings)
Sets the terrain settings.
void colorGradingSettingsChanged()
Emitted when the color grading settings are changed.
void set3DAxisSettings(const Qgs3DAxisSettings &axisSettings, bool force=false)
Sets the current configuration of 3d axis.
void setCameraMovementSpeed(double movementSpeed)
Sets the camera movement speed.
void setTerrainRenderingEnabled(bool terrainRenderingEnabled)
Sets whether the 2D terrain surface will be rendered in.
Q_DECL_DEPRECATED bool debugShadowMapEnabled() const
Returns whether the shadow map debugging is enabled.
Q_DECL_DEPRECATED void setMaxTerrainScreenError(double error)
Sets maximum allowed screen error of terrain tiles in pixels.
void setBackgroundColor(const QColor &color)
Sets background color of the 3D map view.
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 setBloomSettings(const QgsBloomSettings &settings)
Sets the current configuration of bloom lighting effect.
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 setProjectionType(const Qt3DRender::QCameraLens::ProjectionType projectionType)
Sets the camera lens' projection type.
void ambientOcclusionSettingsChanged()
Emitted when ambient occlusion rendering settings are changed.
Q_DECL_DEPRECATED 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 configureTerrainFromProject(QgsProjectElevationProperties *properties, const QgsRectangle &fullExtent)
Configures the map's terrain settings directly from a project's elevation properties.
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.
Q_DECL_DEPRECATED QgsSkyboxSettings skyboxSettings() const
Returns the current configuration of the skybox.
Q_DECL_DEPRECATED double maxTerrainGroundError() const
Returns maximum ground error of terrain tiles in world units.
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.
void setRendererUsage(Qgis::RendererUsage rendererUsage)
Sets the renderer usage.
Q_DECL_DEPRECATED 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.
Q_DECL_DEPRECATED void setShowTerrainBoundingBoxes(bool enabled)
Sets whether to display bounding boxes of terrain tiles (for debugging).
void fieldOfViewChanged()
Emitted when the camera lens field of view changes.
Qgis::RendererUsage rendererUsage() const
Returns the renderer usage.
Q_DECL_DEPRECATED void setIsFpsCounterEnabled(bool fpsCounterEnabled)
Sets whether FPS counter label is enabled.
QgsMapThemeCollection * mapThemeCollection() const
Returns pointer to the collection of map themes.
QList< QgsMapLayer * > layers() const
Returns the list of 3D map layers to be rendered in the scene.
void setTerrainMapTheme(const QString &theme)
Sets name of the map theme.
Q_DECL_DEPRECATED void setTerrainElevationOffset(double offset)
Sets the terrain elevation offset (used to move the terrain up or down).
Q_DECL_DEPRECATED void terrainVerticalScaleChanged()
Emitted when the vertical scale of the terrain has changed.
void terrainGeneratorChanged()
Emitted when the terrain generator has changed.
Q_DECL_DEPRECATED bool showLightSourceOrigins() const
Returns whether to show light source origins as a sphere (for debugging).
void setTerrainGenerator(QgsTerrainGenerator *gen)
Sets terrain generator and sets extent() as the generator's extent.
void showCameraViewCenterChanged()
Emitted when the flag whether camera's view center is shown has changed.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
QgsVector3D origin() const
Returns coordinates in map CRS at which 3D scene has origin (0,0,0).
Q_DECL_DEPRECATED bool showCameraRotationCenter() const
Returns whether to show camera's rotation center as a sphere (for debugging).
static Qgs3DRenderContext fromMapSettings(const Qgs3DMapSettings *mapSettings)
Creates an initialized Qgs3DRenderContext instance from given Qgs3DMapSettings.
static QgsRectangle tryReprojectExtent2D(const QgsRectangle &extent, const QgsCoordinateReferenceSystem &crs1, const QgsCoordinateReferenceSystem &crs2, const QgsCoordinateTransformContext &context)
Reprojects extent from crs1 to crs2 coordinate reference system with context context.
static QgsVector3D worldToMapCoordinates(const QgsVector3D &worldCoords, const QgsVector3D &origin)
Converts 3D world coordinates to map coordinates (applies offset).
static QgsVector3D mapToWorldCoordinates(const QgsVector3D &mapCoords, const QgsVector3D &origin)
Converts map coordinates to 3D world coordinates (applies offset).
static Qgs3DTerrainRegistry * terrainRegistry()
Returns the terrain registry, used for managing 3D terrains.
Base class for all background settings classes used in a 3D map view.
Base class for all terrain settings classes.
virtual bool equals(const QgsAbstractTerrainSettings *other) const =0
Returns true if this settings is exactly equal to another other settings.
Contains the configuration of ambient occlusion rendering.
Contains the configuration of the lighting "bloom" effect.
Contains the configuration of the scene's color grading settings, such as exposure and tone mapping.
static QColor colorFromString(const QString &string)
Decodes a string into a color value.
static QString colorToString(const QColor &color)
Encodes a color into a string value.
Represents a coordinate reference system (CRS).
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
Contains information about the context in which a coordinate transform is executed.
Definition of a directional light in a 3D map scene.
Terrain settings for a simple flat area terrain.
Base class for light sources in 3d scenes.
static QgsLightSource * createFromXml(const QDomElement &element, const QgsReadWriteContext &context)
Creates a new light source from an XML element.
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.
Basic shading material used for rendering based on the Phong shading model with three color component...
Definition of a point light in a 3D map scene.
Temporarily blocks QgsProject "dirtying" for the lifetime of the object.
Contains elevation properties for a QgsProject.
QgsReferencedRectangle fullExtent() const
Returns the full extent of the project, which represents the maximal limits of the project.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
static QgsProject * instance()
Returns the QgsProject singleton instance.
Q_INVOKABLE QgsMapLayer * mapLayer(const QString &layerId) const
Retrieve a pointer to a registered layer by layer ID.
void setDirty(bool b=true)
Flag the project as dirty (modified).
const QgsProjectViewSettings * viewSettings() const
Returns the project's view settings, which contains settings and properties relating to how a QgsProj...
A container for the context for various read/write operations on objects.
A rectangle specified with double values.
Contains configuration for rendering shadows.
Contains the configuration of a skybox entity.
Definition of a sun light in a 3D map scene.
const QgsDateTimeRange & temporalRange() const
Returns the datetime range for the object.
QgsTemporalRangeObject(bool enabled=false)
Constructor QgsTemporalRangeObject.
void setTemporalRange(const QgsDateTimeRange &range)
Sets the temporal range for the object.
Base class for generators of terrain.
void terrainChanged()
Emitted when the terrain changed (for example, raster DEM or mesh have data changed).
virtual void setExtent(const QgsRectangle &extent)
sets the extent of the terrain in terrain's CRS
virtual QgsCoordinateReferenceSystem crs() const
Returns CRS of the terrain.
A 3D vector (similar to QVector3D) with the difference that it uses double precision instead of singl...
T qgsEnumKeyToValue(const QString &key, const T &defaultValue, bool tryValueAsKey=true, bool *returnOk=nullptr)
Returns the value corresponding to the given key of an enum.
#define Q_NOWARN_DEPRECATED_POP
QString qgsEnumValueToKey(const T &value, bool *returnOk=nullptr)
Returns the value for the given key of an enum.
QString qgsFlagValueToKeys(const T &value, bool *returnOk=nullptr)
Returns the value for the given keys of a flag.
T qgsFlagKeysToValue(const QString &keys, const T &defaultValue, bool tryValueAsKey=true, bool *returnOk=nullptr)
Returns the value corresponding to the given keys of a flag.
#define Q_NOWARN_DEPRECATED_PUSH
#define QgsDebugError(str)
_LayerRef< QgsMapLayer > QgsMapLayerRef
QgsTemporalRange< QDateTime > QgsDateTimeRange
QgsRange which stores a range of date times.
#define QGIS_PROTECT_QOBJECT_THREAD_ACCESS
void setLayer(TYPE *l)
Sets the reference to point to a specified layer.
QString layerId
Original layer ID.