QGIS API Documentation 3.99.0-Master (8e76e220402)
Loading...
Searching...
No Matches
qgs3dmapsettings.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgs3dmapsettings.cpp
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#include "qgs3dmapsettings.h"
17
18#include "qgs3d.h"
19#include "qgs3drendercontext.h"
21#include "qgs3dutils.h"
23#include "qgscolorutils.h"
26#include "qgslightsource.h"
31#include "qgsrasterlayer.h"
32#include "qgsterrainprovider.h"
33#include "qgsthreadingutils.h"
34
35#include <QDomDocument>
36#include <QDomElement>
37#include <QString>
38
39#include "moc_qgs3dmapsettings.cpp"
40
41using namespace Qt::StringLiterals;
42
44 : QObject( nullptr )
45{
46 connect( this, &Qgs3DMapSettings::settingsChanged, [&]() {
48 } );
49 connectChangedSignalsToSettingsChanged();
50 mTerrainSettings = std::make_unique<QgsFlatTerrainSettings>();
51}
52
54 : QObject( nullptr )
55 , QgsTemporalRangeObject( other )
56 , mOrigin( other.mOrigin )
57 , mCrs( other.mCrs )
58 , mBackgroundColor( other.mBackgroundColor )
59 , mSelectionColor( other.mSelectionColor )
60 , mTerrainShadingEnabled( other.mTerrainShadingEnabled )
61 , mTerrainShadingMaterial( other.mTerrainShadingMaterial )
62 , mTerrainMapTheme( other.mTerrainMapTheme )
63 , mShowTerrainBoundingBoxes( other.mShowTerrainBoundingBoxes )
64 , mShowTerrainTileInfo( other.mShowTerrainTileInfo )
65 , mShowCameraViewCenter( other.mShowCameraViewCenter )
66 , mShowCameraRotationCenter( other.mShowCameraRotationCenter )
67 , mShowLightSources( other.mShowLightSources )
68 , mShowLabels( other.mShowLabels )
69 , mStopUpdates( other.mStopUpdates )
70 , mShowDebugPanel( other.mShowDebugPanel )
71 , mFieldOfView( other.mFieldOfView )
72 , mProjectionType( other.mProjectionType )
73 , mCameraNavigationMode( other.mCameraNavigationMode )
74 , mCameraMovementSpeed( other.mCameraMovementSpeed )
75 , mLayers( other.mLayers )
76 , mTransformContext( other.mTransformContext )
77 , mPathResolver( other.mPathResolver )
78 , mMapThemes( other.mMapThemes )
79 , mDpi( other.mDpi )
80 , mIsFpsCounterEnabled( other.mIsFpsCounterEnabled )
81 , mIsSkyboxEnabled( other.mIsSkyboxEnabled )
82 , mSkyboxSettings( other.mSkyboxSettings )
83 , mShadowSettings( other.mShadowSettings )
84 , mAmbientOcclusionSettings( other.mAmbientOcclusionSettings )
85 , mEyeDomeLightingEnabled( other.mEyeDomeLightingEnabled )
86 , mEyeDomeLightingStrength( other.mEyeDomeLightingStrength )
87 , mEyeDomeLightingDistance( other.mEyeDomeLightingDistance )
88 , mViewSyncMode( other.mViewSyncMode )
89 , mVisualizeViewFrustum( other.mVisualizeViewFrustum )
90 , mDebugShadowMapEnabled( other.mDebugShadowMapEnabled )
91 , mDebugShadowMapCorner( other.mDebugShadowMapCorner )
92 , mDebugShadowMapSize( other.mDebugShadowMapSize )
93 , mDebugDepthMapEnabled( other.mDebugDepthMapEnabled )
94 , mDebugDepthMapCorner( other.mDebugDepthMapCorner )
95 , mDebugDepthMapSize( other.mDebugDepthMapSize )
96 , mTerrainRenderingEnabled( other.mTerrainRenderingEnabled )
97 , mRendererUsage( other.mRendererUsage )
98 , m3dAxisSettings( other.m3dAxisSettings )
99 , mIsDebugOverlayEnabled( other.mIsDebugOverlayEnabled )
100 , mExtent( other.mExtent )
101 , mShowExtentIn2DView( other.mShowExtentIn2DView )
102 , mShow2DMapOverlay( other.mShow2DMapOverlay )
103{
104 setTerrainSettings( other.mTerrainSettings ? other.mTerrainSettings->clone() : new QgsFlatTerrainSettings() );
105
106 for ( QgsLightSource *source : std::as_const( other.mLightSources ) )
107 {
108 if ( source )
109 mLightSources << source->clone();
110 }
111
112 connect( this, &Qgs3DMapSettings::settingsChanged, [&]() {
114 } );
115 connectChangedSignalsToSettingsChanged();
116}
117
119{
120 qDeleteAll( mLightSources );
121}
122
123void Qgs3DMapSettings::readXml( const QDomElement &elem, const QgsReadWriteContext &context )
124{
126
128 QDomElement elemOrigin = elem.firstChildElement( u"origin"_s );
129 mOrigin = QgsVector3D(
130 elemOrigin.attribute( u"x"_s ).toDouble(),
131 elemOrigin.attribute( u"y"_s ).toDouble(),
132 elemOrigin.attribute( u"z"_s ).toDouble()
133 );
134
135 QDomElement elemExtent = elem.firstChildElement( u"extent"_s );
136 if ( !elemExtent.isNull() )
137 {
138 mExtent = QgsRectangle(
139 elemExtent.attribute( u"xMin"_s ).toDouble(),
140 elemExtent.attribute( u"yMin"_s ).toDouble(),
141 elemExtent.attribute( u"xMax"_s ).toDouble(),
142 elemExtent.attribute( u"yMax"_s ).toDouble()
143 );
144
145 mShowExtentIn2DView = elemExtent.attribute( u"showIn2dView"_s, u"0"_s ).toInt();
146 }
147 else
148 {
150 }
151
152 QDomElement elemCamera = elem.firstChildElement( u"camera"_s );
153 if ( !elemCamera.isNull() )
154 {
155 mFieldOfView = elemCamera.attribute( u"field-of-view"_s, u"45"_s ).toFloat();
156 mProjectionType = static_cast<Qt3DRender::QCameraLens::ProjectionType>( elemCamera.attribute( u"projection-type"_s, u"1"_s ).toInt() );
157 QString cameraNavigationMode = elemCamera.attribute( u"camera-navigation-mode"_s, u"basic-navigation"_s );
158 if ( cameraNavigationMode == "terrain-based-navigation"_L1 )
159 mCameraNavigationMode = Qgis::NavigationMode::TerrainBased;
160 else if ( cameraNavigationMode == "walk-navigation"_L1 )
161 mCameraNavigationMode = Qgis::NavigationMode::Walk;
162 else if ( cameraNavigationMode == "globe-terrain-based-navigation"_L1 )
163 mCameraNavigationMode = Qgis::NavigationMode::GlobeTerrainBased;
164 mCameraMovementSpeed = elemCamera.attribute( u"camera-movement-speed"_s, u"5.0"_s ).toDouble();
165 }
166
167 QDomElement elemColor = elem.firstChildElement( u"color"_s );
168 if ( !elemColor.isNull() )
169 {
170 mBackgroundColor = QgsColorUtils::colorFromString( elemColor.attribute( u"background"_s ) );
171 mSelectionColor = QgsColorUtils::colorFromString( elemColor.attribute( u"selection"_s ) );
172 }
173
174 QDomElement elemCrs = elem.firstChildElement( u"crs"_s );
175 mCrs.readXml( elemCrs );
176
177 QDomElement elemTerrain = elem.firstChildElement( u"terrain"_s );
178 mTerrainRenderingEnabled = elemTerrain.attribute( u"terrain-rendering-enabled"_s, u"1"_s ).toInt();
179 mTerrainShadingEnabled = elemTerrain.attribute( u"shading-enabled"_s, u"0"_s ).toInt();
180
181 QDomElement elemTerrainShadingMaterial = elemTerrain.firstChildElement( u"shading-material"_s );
182 if ( !elemTerrainShadingMaterial.isNull() )
183 mTerrainShadingMaterial.readXml( elemTerrainShadingMaterial, context );
184 mTerrainMapTheme = elemTerrain.attribute( u"map-theme"_s );
185 mShowLabels = elemTerrain.attribute( u"show-labels"_s, u"0"_s ).toInt();
186
187 qDeleteAll( mLightSources );
188 mLightSources.clear();
189 const QDomElement lightsElem = elem.firstChildElement( u"lights"_s );
190 if ( !lightsElem.isNull() )
191 {
192 const QDomNodeList lightNodes = lightsElem.childNodes();
193 for ( int i = 0; i < lightNodes.size(); ++i )
194 {
195 const QDomElement lightElement = lightNodes.at( i ).toElement();
196 if ( QgsLightSource *light = QgsLightSource::createFromXml( lightElement, context ) )
197 mLightSources << light;
198 }
199 }
200 else
201 {
202 // older project format
203 QDomElement elemPointLights = elem.firstChildElement( u"point-lights"_s );
204 if ( !elemPointLights.isNull() )
205 {
206 QDomElement elemPointLight = elemPointLights.firstChildElement( u"point-light"_s );
207 while ( !elemPointLight.isNull() )
208 {
209 auto pointLight = std::make_unique<QgsPointLightSettings>();
210 pointLight->readXml( elemPointLight, context );
211 mLightSources << pointLight.release();
212 elemPointLight = elemPointLight.nextSiblingElement( u"point-light"_s );
213 }
214 }
215 else
216 {
217 // QGIS <= 3.4 did not have light configuration
218 auto defaultLight = std::make_unique<QgsPointLightSettings>();
219 defaultLight->setPosition( QgsVector3D( 0, 1000, 0 ) );
220 mLightSources << defaultLight.release();
221 }
222
223 QDomElement elemDirectionalLights = elem.firstChildElement( u"directional-lights"_s );
224 if ( !elemDirectionalLights.isNull() )
225 {
226 QDomElement elemDirectionalLight = elemDirectionalLights.firstChildElement( u"directional-light"_s );
227 while ( !elemDirectionalLight.isNull() )
228 {
229 auto directionalLight = std::make_unique<QgsDirectionalLightSettings>();
230 directionalLight->readXml( elemDirectionalLight, context );
231 mLightSources << directionalLight.release();
232 elemDirectionalLight = elemDirectionalLight.nextSiblingElement( u"directional-light"_s );
233 }
234 }
235 }
236
237 QDomElement elemMapLayers = elemTerrain.firstChildElement( u"layers"_s );
238 QDomElement elemMapLayer = elemMapLayers.firstChildElement( u"layer"_s );
239 QList<QgsMapLayerRef> mapLayers;
240 while ( !elemMapLayer.isNull() )
241 {
242 mapLayers << QgsMapLayerRef( elemMapLayer.attribute( u"id"_s ) );
243 elemMapLayer = elemMapLayer.nextSiblingElement( u"layer"_s );
244 }
245 mLayers = mapLayers; // needs to resolve refs afterwards
246
247 QDomElement elemTerrainGenerator = elemTerrain.firstChildElement( u"generator"_s );
248 const QString terrainGenType = elemTerrainGenerator.attribute( u"type"_s );
249 std::unique_ptr<QgsAbstractTerrainSettings> terrainSettings( Qgs3D::terrainRegistry()->createTerrainSettings( terrainGenType ) );
250 if ( terrainSettings )
251 {
252 terrainSettings->readXml( elemTerrain, context );
254 }
255
256 QDomElement elemSkybox = elem.firstChildElement( u"skybox"_s );
257 mIsSkyboxEnabled = elemSkybox.attribute( u"skybox-enabled"_s ).toInt();
258 mSkyboxSettings.readXml( elemSkybox, context );
259
260 QDomElement elemShadows = elem.firstChildElement( u"shadow-rendering"_s );
261 mShadowSettings.readXml( elemShadows, context );
262
263 QDomElement elemAmbientOcclusion = elem.firstChildElement( u"screen-space-ambient-occlusion"_s );
264 mAmbientOcclusionSettings.readXml( elemAmbientOcclusion, context );
265
266 QDomElement elemEyeDomeLighting = elem.firstChildElement( u"eye-dome-lighting"_s );
267 mEyeDomeLightingEnabled = elemEyeDomeLighting.attribute( "enabled", u"0"_s ).toInt();
268 mEyeDomeLightingStrength = elemEyeDomeLighting.attribute( "eye-dome-lighting-strength", u"1000.0"_s ).toDouble();
269 mEyeDomeLightingDistance = elemEyeDomeLighting.attribute( "eye-dome-lighting-distance", u"1"_s ).toInt();
270
271 QDomElement elemNavigationSync = elem.firstChildElement( u"navigation-sync"_s );
272 mViewSyncMode = ( Qgis::ViewSyncModeFlags )( elemNavigationSync.attribute( u"view-sync-mode"_s, u"0"_s ).toInt() );
273 mVisualizeViewFrustum = elemNavigationSync.attribute( u"view-frustum-visualization-enabled"_s, u"0"_s ).toInt();
274
275 QDomElement elemDebugSettings = elem.firstChildElement( u"debug-settings"_s );
276 mDebugShadowMapEnabled = elemDebugSettings.attribute( u"shadowmap-enabled"_s, u"0"_s ).toInt();
277 mDebugShadowMapCorner = static_cast<Qt::Corner>( elemDebugSettings.attribute( u"shadowmap-corner"_s, "0" ).toInt() );
278 mDebugShadowMapSize = elemDebugSettings.attribute( u"shadowmap-size"_s, u"0.2"_s ).toDouble();
279
280 mDebugDepthMapEnabled = elemDebugSettings.attribute( u"depthmap-enabled"_s, u"0"_s ).toInt();
281 mDebugDepthMapCorner = static_cast<Qt::Corner>( elemDebugSettings.attribute( u"depthmap-corner"_s, u"1"_s ).toInt() );
282 mDebugDepthMapSize = elemDebugSettings.attribute( u"depthmap-size"_s, u"0.2"_s ).toDouble();
283
284 QDomElement elemDebug = elem.firstChildElement( u"debug"_s );
285 mShowTerrainBoundingBoxes = elemDebug.attribute( u"bounding-boxes"_s, u"0"_s ).toInt();
286 mShowTerrainTileInfo = elemDebug.attribute( u"terrain-tile-info"_s, u"0"_s ).toInt();
287 mShowCameraViewCenter = elemDebug.attribute( u"camera-view-center"_s, u"0"_s ).toInt();
288 mShowCameraRotationCenter = elemDebug.attribute( u"camera-rotation-center"_s, u"0"_s ).toInt();
289 mShowLightSources = elemDebug.attribute( u"show-light-sources"_s, u"0"_s ).toInt();
290 mIsFpsCounterEnabled = elemDebug.attribute( u"show-fps-counter"_s, u"0"_s ).toInt();
291 mStopUpdates = elemDebug.attribute( u"stop-updates"_s, u"0"_s ).toInt();
292 mShowDebugPanel = elemDebug.attribute( u"debug-panel"_s, u"0"_s ).toInt();
293
294 QDomElement elemTemporalRange = elem.firstChildElement( u"temporal-range"_s );
295 QDateTime start = QDateTime::fromString( elemTemporalRange.attribute( u"start"_s ), Qt::ISODate );
296 QDateTime end = QDateTime::fromString( elemTemporalRange.attribute( u"end"_s ), Qt::ISODate );
297 setTemporalRange( QgsDateTimeRange( start, end ) );
298
299 QDomElement elem3dAxis = elem.firstChildElement( u"axis3d"_s );
300 m3dAxisSettings.readXml( elem3dAxis, context );
301
302 QDomElement elemMapOverlay = elem.firstChildElement( u"map-overlay"_s );
303 if ( !elemMapOverlay.isNull() )
304 {
305 mShow2DMapOverlay = elemMapOverlay.attribute( u"enabled"_s, u"0"_s ).toInt();
306 }
307 else
308 {
309 mShow2DMapOverlay = false;
310 }
311}
312
313QDomElement Qgs3DMapSettings::writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const
314{
316
317 QDomElement elem = doc.createElement( u"qgis3d"_s );
318
319 QDomElement elemOrigin = doc.createElement( u"origin"_s );
320 elemOrigin.setAttribute( u"x"_s, QString::number( mOrigin.x() ) );
321 elemOrigin.setAttribute( u"y"_s, QString::number( mOrigin.y() ) );
322 elemOrigin.setAttribute( u"z"_s, QString::number( mOrigin.z() ) );
323 elem.appendChild( elemOrigin );
324
325 QDomElement elemExtent = doc.createElement( u"extent"_s );
326 elemExtent.setAttribute( u"xMin"_s, mExtent.xMinimum() );
327 elemExtent.setAttribute( u"yMin"_s, mExtent.yMinimum() );
328 elemExtent.setAttribute( u"xMax"_s, mExtent.xMaximum() );
329 elemExtent.setAttribute( u"yMax"_s, mExtent.yMaximum() );
330 elemExtent.setAttribute( u"showIn2dView"_s, mShowExtentIn2DView );
331 elem.appendChild( elemExtent );
332
333 QDomElement elemCamera = doc.createElement( u"camera"_s );
334 elemCamera.setAttribute( u"field-of-view"_s, mFieldOfView );
335 elemCamera.setAttribute( u"projection-type"_s, static_cast<int>( mProjectionType ) );
336 switch ( mCameraNavigationMode )
337 {
339 elemCamera.setAttribute( u"camera-navigation-mode"_s, u"terrain-based-navigation"_s );
340 break;
342 elemCamera.setAttribute( u"camera-navigation-mode"_s, u"walk-navigation"_s );
343 break;
345 elemCamera.setAttribute( u"camera-navigation-mode"_s, u"globe-terrain-based-navigation"_s );
346 break;
347 }
348 elemCamera.setAttribute( u"camera-movement-speed"_s, mCameraMovementSpeed );
349 elem.appendChild( elemCamera );
350
351 QDomElement elemColor = doc.createElement( u"color"_s );
352 elemColor.setAttribute( u"background"_s, QgsColorUtils::colorToString( mBackgroundColor ) );
353 elemColor.setAttribute( u"selection"_s, QgsColorUtils::colorToString( mSelectionColor ) );
354 elem.appendChild( elemColor );
355
356 QDomElement elemCrs = doc.createElement( u"crs"_s );
357 mCrs.writeXml( elemCrs, doc );
358 elem.appendChild( elemCrs );
359
360 QDomElement elemTerrain = doc.createElement( u"terrain"_s );
361 elemTerrain.setAttribute( u"terrain-rendering-enabled"_s, mTerrainRenderingEnabled ? 1 : 0 );
362 elemTerrain.setAttribute( u"shading-enabled"_s, mTerrainShadingEnabled ? 1 : 0 );
363
364 QDomElement elemTerrainShadingMaterial = doc.createElement( u"shading-material"_s );
365 mTerrainShadingMaterial.writeXml( elemTerrainShadingMaterial, context );
366 elemTerrain.appendChild( elemTerrainShadingMaterial );
367 elemTerrain.setAttribute( u"map-theme"_s, mTerrainMapTheme );
368 elemTerrain.setAttribute( u"show-labels"_s, mShowLabels ? 1 : 0 );
369
370 {
371 QDomElement elemLights = doc.createElement( u"lights"_s );
372 for ( const QgsLightSource *light : mLightSources )
373 {
374 const QDomElement elemLight = light->writeXml( doc, context );
375 elemLights.appendChild( elemLight );
376 }
377 elem.appendChild( elemLights );
378 }
379
380 QDomElement elemMapLayers = doc.createElement( u"layers"_s );
381 for ( const QgsMapLayerRef &layerRef : mLayers )
382 {
383 QDomElement elemMapLayer = doc.createElement( u"layer"_s );
384 elemMapLayer.setAttribute( u"id"_s, layerRef.layerId );
385 elemMapLayers.appendChild( elemMapLayer );
386 }
387 elemTerrain.appendChild( elemMapLayers );
388
389 QDomElement elemTerrainGenerator = doc.createElement( u"generator"_s );
390 elemTerrainGenerator.setAttribute( u"type"_s, mTerrainSettings->type() );
391 mTerrainSettings->writeXml( elemTerrain, context );
392 elemTerrain.appendChild( elemTerrainGenerator );
393 elem.appendChild( elemTerrain );
394
395 QDomElement elemSkybox = doc.createElement( u"skybox"_s );
396 elemSkybox.setAttribute( u"skybox-enabled"_s, mIsSkyboxEnabled );
397 mSkyboxSettings.writeXml( elemSkybox, context );
398 elem.appendChild( elemSkybox );
399
400 QDomElement elemShadows = doc.createElement( u"shadow-rendering"_s );
401 mShadowSettings.writeXml( elemShadows, context );
402 elem.appendChild( elemShadows );
403
404 QDomElement elemAmbientOcclusion = doc.createElement( u"screen-space-ambient-occlusion"_s );
405 mAmbientOcclusionSettings.writeXml( elemAmbientOcclusion, context );
406 elem.appendChild( elemAmbientOcclusion );
407
408 QDomElement elemDebug = doc.createElement( u"debug"_s );
409 elemDebug.setAttribute( u"bounding-boxes"_s, mShowTerrainBoundingBoxes ? 1 : 0 );
410 elemDebug.setAttribute( u"terrain-tile-info"_s, mShowTerrainTileInfo ? 1 : 0 );
411 elemDebug.setAttribute( u"camera-view-center"_s, mShowCameraViewCenter ? 1 : 0 );
412 elemDebug.setAttribute( u"camera-rotation-center"_s, mShowCameraRotationCenter ? 1 : 0 );
413 elemDebug.setAttribute( u"show-light-sources"_s, mShowLightSources ? 1 : 0 );
414 elemDebug.setAttribute( u"show-fps-counter"_s, mIsFpsCounterEnabled ? 1 : 0 );
415 elemDebug.setAttribute( u"stop-updates"_s, mStopUpdates ? 1 : 0 );
416 elemDebug.setAttribute( u"debug-panel"_s, mShowDebugPanel ? 1 : 0 );
417 elem.appendChild( elemDebug );
418
419 QDomElement elemEyeDomeLighting = doc.createElement( u"eye-dome-lighting"_s );
420 elemEyeDomeLighting.setAttribute( u"enabled"_s, mEyeDomeLightingEnabled ? 1 : 0 );
421 elemEyeDomeLighting.setAttribute( u"eye-dome-lighting-strength"_s, mEyeDomeLightingStrength );
422 elemEyeDomeLighting.setAttribute( u"eye-dome-lighting-distance"_s, mEyeDomeLightingDistance );
423 elem.appendChild( elemEyeDomeLighting );
424
425 QDomElement elemNavigationSync = doc.createElement( u"navigation-sync"_s );
426 elemNavigationSync.setAttribute( u"view-sync-mode"_s, ( int ) mViewSyncMode );
427 elemNavigationSync.setAttribute( u"view-frustum-visualization-enabled"_s, mVisualizeViewFrustum ? 1 : 0 );
428 elem.appendChild( elemNavigationSync );
429
430 QDomElement elemDebugSettings = doc.createElement( u"debug-settings"_s );
431 elemDebugSettings.setAttribute( u"shadowmap-enabled"_s, mDebugShadowMapEnabled );
432 elemDebugSettings.setAttribute( u"shadowmap-corner"_s, mDebugShadowMapCorner );
433 elemDebugSettings.setAttribute( u"shadowmap-size"_s, mDebugShadowMapSize );
434 elemDebugSettings.setAttribute( u"depthmap-enabled"_s, mDebugDepthMapEnabled );
435 elemDebugSettings.setAttribute( u"depthmap-corner"_s, mDebugDepthMapCorner );
436 elemDebugSettings.setAttribute( u"depthmap-size"_s, mDebugDepthMapSize );
437 elem.appendChild( elemDebugSettings );
438
439 QDomElement elemTemporalRange = doc.createElement( u"temporal-range"_s );
440 elemTemporalRange.setAttribute( u"start"_s, temporalRange().begin().toString( Qt::ISODate ) );
441 elemTemporalRange.setAttribute( u"end"_s, temporalRange().end().toString( Qt::ISODate ) );
442
443 QDomElement elem3dAxis = doc.createElement( u"axis3d"_s );
444 m3dAxisSettings.writeXml( elem3dAxis, context );
445 elem.appendChild( elem3dAxis );
446
447 if ( mShow2DMapOverlay )
448 {
449 QDomElement elemMapOverlay = doc.createElement( u"map-overlay"_s );
450 elemMapOverlay.setAttribute( u"enabled"_s, 1 );
451 elem.appendChild( elemMapOverlay );
452 }
453
454 return elem;
455}
456
458{
460
461 for ( int i = 0; i < mLayers.count(); ++i )
462 {
463 QgsMapLayerRef &layerRef = mLayers[i];
464 layerRef.setLayer( project.mapLayer( layerRef.layerId ) );
465 }
466
467 if ( mTerrainSettings )
468 {
469 mTerrainSettings->resolveReferences( &project );
470
471 std::unique_ptr<QgsTerrainGenerator> terrainGenerator = mTerrainSettings->createTerrainGenerator( Qgs3DRenderContext::fromMapSettings( this ) );
472 if ( terrainGenerator )
473 {
475 }
477 }
478}
479
481{
483
485 {
486 QgsDebugError( u"extent() should not be used with globe!"_s );
487 }
488
489 return mExtent;
490}
491
493{
495
496 if ( extent == mExtent )
497 return;
498
500 {
501 QgsDebugError( u"setExtent() should not be used with globe!"_s );
502 }
503
504 mExtent = extent;
505 const QgsPointXY center = mExtent.center();
506 setOrigin( QgsVector3D( center.x(), center.y(), 0 ) );
507 if ( mTerrainGenerator )
508 {
509 QgsRectangle terrainExtent = Qgs3DUtils::tryReprojectExtent2D( mExtent, mCrs, mTerrainGenerator->crs(), mTransformContext );
510 mTerrainGenerator->setExtent( terrainExtent );
511 }
512 emit extentChanged();
513}
514
516{
518
519 if ( origin == mOrigin )
520 return;
521
522 mOrigin = origin;
523 emit originChanged();
524}
525
527{
529
530 return mOrigin;
531}
532
539
546
548{
550
551 mCrs = crs;
552
553 // for convenience, make sure the navigation mode is consistent with the scene mode
554 if ( sceneMode() == Qgis::SceneMode::Globe && mCameraNavigationMode == Qgis::NavigationMode::TerrainBased )
555 {
557 }
558 else if ( sceneMode() == Qgis::SceneMode::Local && mCameraNavigationMode == Qgis::NavigationMode::GlobeTerrainBased )
559 {
561 }
562}
563
570
577
584
586{
588
589 mTransformContext = context;
590}
591
593{
595
596 return mPathResolver;
597}
598
600{
602
603 mPathResolver = resolver;
604}
605
612
614{
616
617 mMapThemes = mapThemes;
618}
619
620void Qgs3DMapSettings::setBackgroundColor( const QColor &color )
621{
623
624 if ( color == mBackgroundColor )
625 return;
626
627 mBackgroundColor = color;
629}
630
632{
634
635 return mBackgroundColor;
636}
637
638void Qgs3DMapSettings::setSelectionColor( const QColor &color )
639{
641
642 if ( color == mSelectionColor )
643 return;
644
645 mSelectionColor = color;
647}
648
650{
652
653 return mSelectionColor;
654}
655
657{
659
660 if ( zScale == mTerrainSettings->verticalScale() )
661 return;
662
663 mTerrainSettings->setVerticalScale( zScale );
668}
669
671{
673
674 return mTerrainSettings->verticalScale();
675}
676
677void Qgs3DMapSettings::setLayers( const QList<QgsMapLayer *> &layers )
678{
680
681 const QList<QgsMapLayer *> raw = _qgis_listRefToRaw( mLayers );
682
683 if ( layers == raw )
684 return;
685
686 mLayers = _qgis_listRawToRef( layers );
687 emit layersChanged();
688}
689
690QList<QgsMapLayer *> Qgs3DMapSettings::layers() const
691{
693
694 QList<QgsMapLayer *> lst;
695 lst.reserve( mLayers.count() );
696 for ( const QgsMapLayerRef &layerRef : mLayers )
697 {
698 if ( layerRef.layer )
699 lst.append( layerRef.layer );
700 }
701 return lst;
702}
703
705{
707
708 setExtent( fullExtent );
709
710 std::unique_ptr<QgsAbstractTerrainSettings> terrainSettings( Qgs3D::terrainRegistry()->configureTerrainFromProject( properties ) );
711 if ( terrainSettings )
712 {
714 }
715}
716
718{
720
721 return mTerrainSettings.get();
722}
723
725{
727
728 bool hasChanged = false;
729 if ( settings == mTerrainSettings.get() )
730 {
731 // emit signals anyway. We don't know if the caller changed settings on the pointer before calling this..
732 hasChanged = true;
733 }
734 else
735 {
736 // ensure to generate the terrain if the settings have changed or if the terrain has never been generated.
737 hasChanged = !settings->equals( mTerrainSettings.get() ) || !mTerrainGenerator;
738 mTerrainSettings.reset( settings );
739 }
740
741 if ( hasChanged )
742 {
743 std::unique_ptr<QgsTerrainGenerator> terrainGenerator = mTerrainSettings->createTerrainGenerator( Qgs3DRenderContext::fromMapSettings( this ) );
744 if ( terrainGenerator )
745 {
747 }
748
749 // emit all the signals, we don't know exactly what's changed
754 emit terrainElevationOffsetChanged( mTerrainSettings->elevationOffset() );
757
759 }
760}
761
763{
765
766 if ( mTerrainSettings->mapTileResolution() == res )
767 return;
768
769 mTerrainSettings->setMapTileResolution( res );
774}
775
777{
779
780 return mTerrainSettings->mapTileResolution();
781}
782
784{
786
787 if ( mTerrainSettings->maximumScreenError() == error )
788 return;
789
790 mTerrainSettings->setMaximumScreenError( error );
795}
796
798{
800
801 return mTerrainSettings->maximumScreenError();
802}
803
805{
807
808 if ( mTerrainSettings->maximumGroundError() == error )
809 return;
810
811 mTerrainSettings->setMaximumGroundError( error );
815
817}
818
820{
822
823 if ( mTerrainSettings->elevationOffset() == offset )
824 return;
825 mTerrainSettings->setElevationOffset( offset );
827 emit terrainElevationOffsetChanged( offset );
830}
831
833{
835
836 return mTerrainSettings->elevationOffset();
837}
838
840{
842
843 return mTerrainSettings->maximumGroundError();
844}
845
847{
849
850 if ( mTerrainGenerator )
851 {
852 disconnect( mTerrainGenerator.get(), &QgsTerrainGenerator::terrainChanged, this, &Qgs3DMapSettings::terrainGeneratorChanged );
853 }
854
855 if ( gen->crs().isValid() ) // Don't bother setting an extent rect in the wrong CRS
856 {
857 QgsRectangle terrainExtent = Qgs3DUtils::tryReprojectExtent2D( mExtent, mCrs, gen->crs(), mTransformContext );
858 gen->setExtent( terrainExtent );
859 }
860 mTerrainGenerator.reset( gen );
861 connect( mTerrainGenerator.get(), &QgsTerrainGenerator::terrainChanged, this, &Qgs3DMapSettings::terrainGeneratorChanged );
862
864}
865
867{
869
870 return mTerrainGenerator.get();
871}
872
874{
876
877 if ( mTerrainShadingEnabled == enabled )
878 return;
879
880 mTerrainShadingEnabled = enabled;
882}
883
885{
887
888 return mTerrainShadingEnabled;
889}
890
892{
894
895 if ( mTerrainShadingMaterial == material )
896 return;
897
898 mTerrainShadingMaterial = material;
900}
901
908
909void Qgs3DMapSettings::setTerrainMapTheme( const QString &theme )
910{
912
913 if ( mTerrainMapTheme == theme )
914 return;
915
916 mTerrainMapTheme = theme;
918}
919
921{
923
924 return mTerrainMapTheme;
925}
926
928{
930
931 if ( mShowTerrainBoundingBoxes == enabled )
932 return;
933
934 mShowTerrainBoundingBoxes = enabled;
936}
937
939{
941
942 return mShowTerrainBoundingBoxes;
943}
944
945
947{
949
950 if ( mShowTerrainTileInfo == enabled )
951 return;
952
953 mShowTerrainTileInfo = enabled;
955}
956
958{
960
961 return mShowTerrainTileInfo;
962}
963
965{
967
968 if ( mShowCameraViewCenter == enabled )
969 return;
970
971 mShowCameraViewCenter = enabled;
973}
974
976{
978
979 return mShowCameraViewCenter;
980}
981
983{
985
986 if ( mShowCameraRotationCenter == enabled )
987 return;
988
989 mShowCameraRotationCenter = enabled;
991}
992
994{
996
997 return mShowCameraRotationCenter;
998}
999
1001{
1003
1004 if ( mShowLightSources == enabled )
1005 return;
1006
1007 mShowLightSources = enabled;
1009}
1010
1012{
1014
1015 return mShowLightSources;
1016}
1017
1019{
1021
1022 if ( mShowLabels == enabled )
1023 return;
1024
1025 mShowLabels = enabled;
1026 emit showLabelsChanged();
1027}
1028
1030{
1032
1033 return mShowLabels;
1034}
1035
1037{
1039
1040 if ( mStopUpdates == enabled )
1041 return;
1042
1043 mStopUpdates = enabled;
1044 emit stopUpdatesChanged();
1045}
1046
1048{
1050
1051 return mStopUpdates;
1052}
1053
1055{
1057
1058 if ( mEyeDomeLightingEnabled == enabled )
1059 return;
1060 mEyeDomeLightingEnabled = enabled;
1062}
1063
1065{
1067
1068 return mEyeDomeLightingEnabled;
1069}
1070
1072{
1074
1075 if ( mEyeDomeLightingStrength == strength )
1076 return;
1077 mEyeDomeLightingStrength = strength;
1079}
1080
1082{
1084
1085 return mEyeDomeLightingStrength;
1086}
1087
1089{
1091
1092 if ( mEyeDomeLightingDistance == distance )
1093 return;
1094 mEyeDomeLightingDistance = distance;
1096}
1097
1099{
1101
1102 return mEyeDomeLightingDistance;
1103}
1104
1105QList<QgsLightSource *> Qgs3DMapSettings::lightSources() const
1106{
1108
1109 return mLightSources;
1110}
1111
1112void Qgs3DMapSettings::setLightSources( const QList<QgsLightSource *> &lights )
1113{
1115
1116 // have lights actually changed?
1117 if ( mLightSources.count() == lights.count() )
1118 {
1119 bool same = true;
1120 for ( int i = 0; i < mLightSources.count(); ++i )
1121 {
1122 if ( mLightSources[i]->type() == lights[i]->type() )
1123 {
1124 switch ( mLightSources[i]->type() )
1125 {
1127 if ( *static_cast<QgsPointLightSettings *>( mLightSources[i] ) == *static_cast<QgsPointLightSettings *>( lights[i] ) )
1128 continue;
1129 break;
1131 if ( *static_cast<QgsDirectionalLightSettings *>( mLightSources[i] ) == *static_cast<QgsDirectionalLightSettings *>( lights[i] ) )
1132 continue;
1133 break;
1134 }
1135 }
1136 same = false;
1137 break;
1138 }
1139 if ( same )
1140 {
1141 qDeleteAll( lights );
1142 return;
1143 }
1144 }
1145
1146 qDeleteAll( mLightSources );
1147 mLightSources = lights;
1148
1150 emit pointLightsChanged();
1151 emit lightSourcesChanged();
1152}
1153
1155{
1157
1158 return mFieldOfView;
1159}
1160
1162{
1164
1165 if ( mFieldOfView == fieldOfView )
1166 return;
1167
1168 mFieldOfView = fieldOfView;
1169 emit fieldOfViewChanged();
1170}
1171
1172Qt3DRender::QCameraLens::ProjectionType Qgs3DMapSettings::projectionType() const
1173{
1175
1176 return mProjectionType;
1177}
1178
1179void Qgs3DMapSettings::setProjectionType( const Qt3DRender::QCameraLens::ProjectionType projectionType )
1180{
1182
1183 if ( mProjectionType == projectionType )
1184 return;
1185
1186 mProjectionType = projectionType;
1187 emit projectionTypeChanged();
1188}
1189
1191{
1193
1194 return mCameraNavigationMode;
1195}
1196
1198{
1200
1201 if ( mCameraNavigationMode == navigationMode )
1202 return;
1203
1204 mCameraNavigationMode = navigationMode;
1206}
1207
1209{
1211
1212 return mCameraMovementSpeed;
1213}
1214
1216{
1218
1219 if ( mCameraMovementSpeed == movementSpeed )
1220 return;
1221
1222 mCameraMovementSpeed = movementSpeed;
1224}
1225
1226void Qgs3DMapSettings::setOutputDpi( const double dpi )
1227{
1229
1230 mDpi = dpi;
1231}
1232
1234{
1236
1237 return mDpi;
1238}
1239
1241{
1243
1244 return mSkyboxSettings;
1245}
1246
1248{
1250
1251 return mShadowSettings;
1252}
1253
1255{
1257
1258 return mAmbientOcclusionSettings;
1259}
1260
1268
1276
1284
1286{
1288
1289 return mIsSkyboxEnabled;
1290}
1291
1293{
1295
1296 mIsSkyboxEnabled = enabled;
1297}
1298
1300{
1302
1303 return mIsFpsCounterEnabled;
1304}
1305
1306void Qgs3DMapSettings::setShowDebugPanel( const bool enabled )
1307{
1309
1310 if ( mShowDebugPanel == enabled )
1311 return;
1312
1313 mShowDebugPanel = enabled;
1314 emit showDebugPanelChanged( enabled );
1315}
1316
1318{
1320
1321 return mShowDebugPanel;
1322}
1323
1324void Qgs3DMapSettings::setDebugShadowMapSettings( bool enabled, Qt::Corner corner, double size )
1325{
1327
1328 mDebugShadowMapEnabled = enabled;
1329 mDebugShadowMapCorner = corner;
1330 mDebugShadowMapSize = size;
1332}
1333
1335{
1337
1338 return mDebugShadowMapEnabled;
1339}
1340
1342{
1344
1345 return mDebugShadowMapCorner;
1346}
1347
1349{
1351
1352 return mDebugShadowMapSize;
1353}
1354
1355void Qgs3DMapSettings::setDebugDepthMapSettings( bool enabled, Qt::Corner corner, double size )
1356{
1358
1359 mDebugDepthMapEnabled = enabled;
1360 mDebugDepthMapCorner = corner;
1361 mDebugDepthMapSize = size;
1363}
1364
1366{
1368
1369 return mDebugDepthMapEnabled;
1370}
1371
1373{
1375
1376 return mDebugDepthMapCorner;
1377}
1378
1380{
1382
1383 return mDebugDepthMapSize;
1384}
1385
1386void Qgs3DMapSettings::setIsFpsCounterEnabled( bool fpsCounterEnabled )
1387{
1389
1390 if ( fpsCounterEnabled == mIsFpsCounterEnabled )
1391 return;
1392 mIsFpsCounterEnabled = fpsCounterEnabled;
1393 emit fpsCounterEnabledChanged( mIsFpsCounterEnabled );
1394}
1395
1397{
1399
1400 return mTerrainRenderingEnabled;
1401}
1402
1404{
1406
1407 if ( terrainRenderingEnabled == mTerrainRenderingEnabled )
1408 return;
1409 mTerrainRenderingEnabled = terrainRenderingEnabled;
1411}
1412
1414{
1416
1417 return mRendererUsage;
1418}
1419
1426
1433
1435{
1437
1438 mViewSyncMode = mode;
1439}
1440
1442{
1444
1445 return mVisualizeViewFrustum;
1446}
1447
1449{
1451
1452 if ( mVisualizeViewFrustum != enabled )
1453 {
1454 mVisualizeViewFrustum = enabled;
1456 }
1457}
1458
1460{
1462
1463 return m3dAxisSettings;
1464}
1465
1466void Qgs3DMapSettings::setIsDebugOverlayEnabled( bool debugOverlayEnabled )
1467{
1469
1470 if ( debugOverlayEnabled == mIsDebugOverlayEnabled )
1471 return;
1472
1473 mIsDebugOverlayEnabled = debugOverlayEnabled;
1474 emit debugOverlayEnabledChanged( mIsDebugOverlayEnabled );
1475}
1476
1478{
1480
1481 return mShowExtentIn2DView;
1482}
1483
1484void Qgs3DMapSettings::connectChangedSignalsToSettingsChanged()
1485{
1487
1519}
1520
1521
1522void Qgs3DMapSettings::set3DAxisSettings( const Qgs3DAxisSettings &axisSettings, bool force )
1523{
1525
1526 if ( axisSettings == m3dAxisSettings )
1527 {
1528 if ( force )
1529 {
1530 // ie. refresh. We need to disconnect and to reconnect to avoid 'dirty' project
1532 emit axisSettingsChanged();
1534 }
1535 }
1536 else
1537 {
1538 m3dAxisSettings = axisSettings;
1539 emit axisSettingsChanged();
1540 }
1541}
1542
1544{
1546
1547 return mIsDebugOverlayEnabled;
1548}
1549
1551{
1553
1554 if ( show == mShowExtentIn2DView )
1555 return;
1556
1557 mShowExtentIn2DView = show;
1559}
1560
1562{
1564
1565 return mShow2DMapOverlay;
1566}
1567
1569{
1571
1572 if ( mShow2DMapOverlay == enabled )
1573 return;
1574
1575 mShow2DMapOverlay = enabled;
1577}
@ Geocentric
Geocentric CRS.
Definition qgis.h:2388
QFlags< ViewSyncModeFlag > ViewSyncModeFlags
Definition qgis.h:3553
NavigationMode
The navigation mode used by 3D cameras.
Definition qgis.h:4237
@ TerrainBased
The default navigation based on the terrain.
Definition qgis.h:4238
@ Walk
Uses WASD keys or arrows to navigate in walking (first person) manner.
Definition qgis.h:4239
@ GlobeTerrainBased
Navigation similar to TerrainBased, but for use with globe.
Definition qgis.h:4240
RendererUsage
Usage of the renderer.
Definition qgis.h:3516
SceneMode
The 3D scene mode used in 3D map views.
Definition qgis.h:4250
@ Globe
Scene is represented as a globe using a geocentric CRS.
Definition qgis.h:4252
@ Local
Local scene based on a projected CRS.
Definition qgis.h:4251
@ Point
Point light source.
Definition qgis.h:4226
@ Directional
Directional light source.
Definition qgis.h:4227
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 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.
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 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.
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.
bool isSkyboxEnabled() const
Returns whether the skybox is enabled.
void setFieldOfView(const float fieldOfView)
Sets the camera lens' field of view.
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.
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.
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.
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.
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 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 setSkyboxSettings(const QgsSkyboxSettings &skyboxSettings)
Sets the current configuration of the skybox.
void skyboxSettingsChanged()
Emitted when skybox settings are changed.
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.
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 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.
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.
void setShowLightSourceOrigins(bool enabled)
Sets whether to show light source origins as a sphere (for debugging).
bool showDebugPanel() const
Returns whether the debug side panel is shown.
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.
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.
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.
void setDebugShadowMapSettings(bool enabled, Qt::Corner corner, double size)
Sets the debugging settings of the shadow map.
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.
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().
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,...
bool showTerrainBoundingBoxes() const
Returns whether to display bounding boxes of terrain tiles (for debugging).
void showLabelsChanged()
Emitted when the flag whether labels are displayed on terrain tiles has changed.
void setStopUpdates(bool enabled)
Sets whether scene updates on camera movement should be enabled.
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 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.
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 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.
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.
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.
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 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.
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.
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 debugShadowMapSettingsChanged()
Emitted when shadow map debugging has changed.
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).
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.
Definition qgs3d.cpp:94
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.
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.
Represents a 2D point.
Definition qgspointxy.h:62
double y
Definition qgspointxy.h:66
double x
Definition qgspointxy.h:65
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,...
Definition qgsproject.h:113
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.
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...
Definition qgsvector3d.h:33
#define Q_NOWARN_DEPRECATED_POP
Definition qgis.h:7486
#define Q_NOWARN_DEPRECATED_PUSH
Definition qgis.h:7485
#define QgsDebugError(str)
Definition qgslogger.h:59
_LayerRef< QgsMapLayer > QgsMapLayerRef
QgsTemporalRange< QDateTime > QgsDateTimeRange
QgsRange which stores a range of date times.
Definition qgsrange.h:764
#define QGIS_PROTECT_QOBJECT_THREAD_ACCESS
void setLayer(TYPE *l)
Sets the reference to point to a specified layer.
QString layerId
Original layer ID.