QGIS API Documentation 3.99.0-Master (d270888f95f)
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{
103 setTerrainSettings( other.mTerrainSettings ? other.mTerrainSettings->clone() : new QgsFlatTerrainSettings() );
104
105 for ( QgsLightSource *source : std::as_const( other.mLightSources ) )
106 {
107 if ( source )
108 mLightSources << source->clone();
109 }
110
111 connect( this, &Qgs3DMapSettings::settingsChanged, [&]() {
113 } );
114 connectChangedSignalsToSettingsChanged();
115}
116
118{
119 qDeleteAll( mLightSources );
120}
121
122void Qgs3DMapSettings::readXml( const QDomElement &elem, const QgsReadWriteContext &context )
123{
125
127 QDomElement elemOrigin = elem.firstChildElement( u"origin"_s );
128 mOrigin = QgsVector3D(
129 elemOrigin.attribute( u"x"_s ).toDouble(),
130 elemOrigin.attribute( u"y"_s ).toDouble(),
131 elemOrigin.attribute( u"z"_s ).toDouble()
132 );
133
134 QDomElement elemExtent = elem.firstChildElement( u"extent"_s );
135 if ( !elemExtent.isNull() )
136 {
137 mExtent = QgsRectangle(
138 elemExtent.attribute( u"xMin"_s ).toDouble(),
139 elemExtent.attribute( u"yMin"_s ).toDouble(),
140 elemExtent.attribute( u"xMax"_s ).toDouble(),
141 elemExtent.attribute( u"yMax"_s ).toDouble()
142 );
143
144 mShowExtentIn2DView = elemExtent.attribute( u"showIn2dView"_s, u"0"_s ).toInt();
145 }
146 else
147 {
149 }
150
151 QDomElement elemCamera = elem.firstChildElement( u"camera"_s );
152 if ( !elemCamera.isNull() )
153 {
154 mFieldOfView = elemCamera.attribute( u"field-of-view"_s, u"45"_s ).toFloat();
155 mProjectionType = static_cast<Qt3DRender::QCameraLens::ProjectionType>( elemCamera.attribute( u"projection-type"_s, u"1"_s ).toInt() );
156 QString cameraNavigationMode = elemCamera.attribute( u"camera-navigation-mode"_s, u"basic-navigation"_s );
157 if ( cameraNavigationMode == "terrain-based-navigation"_L1 )
158 mCameraNavigationMode = Qgis::NavigationMode::TerrainBased;
159 else if ( cameraNavigationMode == "walk-navigation"_L1 )
160 mCameraNavigationMode = Qgis::NavigationMode::Walk;
161 else if ( cameraNavigationMode == "globe-terrain-based-navigation"_L1 )
162 mCameraNavigationMode = Qgis::NavigationMode::GlobeTerrainBased;
163 mCameraMovementSpeed = elemCamera.attribute( u"camera-movement-speed"_s, u"5.0"_s ).toDouble();
164 }
165
166 QDomElement elemColor = elem.firstChildElement( u"color"_s );
167 if ( !elemColor.isNull() )
168 {
169 mBackgroundColor = QgsColorUtils::colorFromString( elemColor.attribute( u"background"_s ) );
170 mSelectionColor = QgsColorUtils::colorFromString( elemColor.attribute( u"selection"_s ) );
171 }
172
173 QDomElement elemCrs = elem.firstChildElement( u"crs"_s );
174 mCrs.readXml( elemCrs );
175
176 QDomElement elemTerrain = elem.firstChildElement( u"terrain"_s );
177 mTerrainRenderingEnabled = elemTerrain.attribute( u"terrain-rendering-enabled"_s, u"1"_s ).toInt();
178 mTerrainShadingEnabled = elemTerrain.attribute( u"shading-enabled"_s, u"0"_s ).toInt();
179
180 QDomElement elemTerrainShadingMaterial = elemTerrain.firstChildElement( u"shading-material"_s );
181 if ( !elemTerrainShadingMaterial.isNull() )
182 mTerrainShadingMaterial.readXml( elemTerrainShadingMaterial, context );
183 mTerrainMapTheme = elemTerrain.attribute( u"map-theme"_s );
184 mShowLabels = elemTerrain.attribute( u"show-labels"_s, u"0"_s ).toInt();
185
186 qDeleteAll( mLightSources );
187 mLightSources.clear();
188 const QDomElement lightsElem = elem.firstChildElement( u"lights"_s );
189 if ( !lightsElem.isNull() )
190 {
191 const QDomNodeList lightNodes = lightsElem.childNodes();
192 for ( int i = 0; i < lightNodes.size(); ++i )
193 {
194 const QDomElement lightElement = lightNodes.at( i ).toElement();
195 if ( QgsLightSource *light = QgsLightSource::createFromXml( lightElement, context ) )
196 mLightSources << light;
197 }
198 }
199 else
200 {
201 // older project format
202 QDomElement elemPointLights = elem.firstChildElement( u"point-lights"_s );
203 if ( !elemPointLights.isNull() )
204 {
205 QDomElement elemPointLight = elemPointLights.firstChildElement( u"point-light"_s );
206 while ( !elemPointLight.isNull() )
207 {
208 auto pointLight = std::make_unique<QgsPointLightSettings>();
209 pointLight->readXml( elemPointLight, context );
210 mLightSources << pointLight.release();
211 elemPointLight = elemPointLight.nextSiblingElement( u"point-light"_s );
212 }
213 }
214 else
215 {
216 // QGIS <= 3.4 did not have light configuration
217 auto defaultLight = std::make_unique<QgsPointLightSettings>();
218 defaultLight->setPosition( QgsVector3D( 0, 1000, 0 ) );
219 mLightSources << defaultLight.release();
220 }
221
222 QDomElement elemDirectionalLights = elem.firstChildElement( u"directional-lights"_s );
223 if ( !elemDirectionalLights.isNull() )
224 {
225 QDomElement elemDirectionalLight = elemDirectionalLights.firstChildElement( u"directional-light"_s );
226 while ( !elemDirectionalLight.isNull() )
227 {
228 auto directionalLight = std::make_unique<QgsDirectionalLightSettings>();
229 directionalLight->readXml( elemDirectionalLight, context );
230 mLightSources << directionalLight.release();
231 elemDirectionalLight = elemDirectionalLight.nextSiblingElement( u"directional-light"_s );
232 }
233 }
234 }
235
236 QDomElement elemMapLayers = elemTerrain.firstChildElement( u"layers"_s );
237 QDomElement elemMapLayer = elemMapLayers.firstChildElement( u"layer"_s );
238 QList<QgsMapLayerRef> mapLayers;
239 while ( !elemMapLayer.isNull() )
240 {
241 mapLayers << QgsMapLayerRef( elemMapLayer.attribute( u"id"_s ) );
242 elemMapLayer = elemMapLayer.nextSiblingElement( u"layer"_s );
243 }
244 mLayers = mapLayers; // needs to resolve refs afterwards
245
246 QDomElement elemTerrainGenerator = elemTerrain.firstChildElement( u"generator"_s );
247 const QString terrainGenType = elemTerrainGenerator.attribute( u"type"_s );
248 std::unique_ptr<QgsAbstractTerrainSettings> terrainSettings( Qgs3D::terrainRegistry()->createTerrainSettings( terrainGenType ) );
249 if ( terrainSettings )
250 {
251 terrainSettings->readXml( elemTerrain, context );
253 }
254
255 QDomElement elemSkybox = elem.firstChildElement( u"skybox"_s );
256 mIsSkyboxEnabled = elemSkybox.attribute( u"skybox-enabled"_s ).toInt();
257 mSkyboxSettings.readXml( elemSkybox, context );
258
259 QDomElement elemShadows = elem.firstChildElement( u"shadow-rendering"_s );
260 mShadowSettings.readXml( elemShadows, context );
261
262 QDomElement elemAmbientOcclusion = elem.firstChildElement( u"screen-space-ambient-occlusion"_s );
263 mAmbientOcclusionSettings.readXml( elemAmbientOcclusion, context );
264
265 QDomElement elemEyeDomeLighting = elem.firstChildElement( u"eye-dome-lighting"_s );
266 mEyeDomeLightingEnabled = elemEyeDomeLighting.attribute( "enabled", u"0"_s ).toInt();
267 mEyeDomeLightingStrength = elemEyeDomeLighting.attribute( "eye-dome-lighting-strength", u"1000.0"_s ).toDouble();
268 mEyeDomeLightingDistance = elemEyeDomeLighting.attribute( "eye-dome-lighting-distance", u"1"_s ).toInt();
269
270 QDomElement elemNavigationSync = elem.firstChildElement( u"navigation-sync"_s );
271 mViewSyncMode = ( Qgis::ViewSyncModeFlags )( elemNavigationSync.attribute( u"view-sync-mode"_s, u"0"_s ).toInt() );
272 mVisualizeViewFrustum = elemNavigationSync.attribute( u"view-frustum-visualization-enabled"_s, u"0"_s ).toInt();
273
274 QDomElement elemDebugSettings = elem.firstChildElement( u"debug-settings"_s );
275 mDebugShadowMapEnabled = elemDebugSettings.attribute( u"shadowmap-enabled"_s, u"0"_s ).toInt();
276 mDebugShadowMapCorner = static_cast<Qt::Corner>( elemDebugSettings.attribute( u"shadowmap-corner"_s, "0" ).toInt() );
277 mDebugShadowMapSize = elemDebugSettings.attribute( u"shadowmap-size"_s, u"0.2"_s ).toDouble();
278
279 mDebugDepthMapEnabled = elemDebugSettings.attribute( u"depthmap-enabled"_s, u"0"_s ).toInt();
280 mDebugDepthMapCorner = static_cast<Qt::Corner>( elemDebugSettings.attribute( u"depthmap-corner"_s, u"1"_s ).toInt() );
281 mDebugDepthMapSize = elemDebugSettings.attribute( u"depthmap-size"_s, u"0.2"_s ).toDouble();
282
283 QDomElement elemDebug = elem.firstChildElement( u"debug"_s );
284 mShowTerrainBoundingBoxes = elemDebug.attribute( u"bounding-boxes"_s, u"0"_s ).toInt();
285 mShowTerrainTileInfo = elemDebug.attribute( u"terrain-tile-info"_s, u"0"_s ).toInt();
286 mShowCameraViewCenter = elemDebug.attribute( u"camera-view-center"_s, u"0"_s ).toInt();
287 mShowCameraRotationCenter = elemDebug.attribute( u"camera-rotation-center"_s, u"0"_s ).toInt();
288 mShowLightSources = elemDebug.attribute( u"show-light-sources"_s, u"0"_s ).toInt();
289 mIsFpsCounterEnabled = elemDebug.attribute( u"show-fps-counter"_s, u"0"_s ).toInt();
290 mStopUpdates = elemDebug.attribute( u"stop-updates"_s, u"0"_s ).toInt();
291 mShowDebugPanel = elemDebug.attribute( u"debug-panel"_s, u"0"_s ).toInt();
292
293 QDomElement elemTemporalRange = elem.firstChildElement( u"temporal-range"_s );
294 QDateTime start = QDateTime::fromString( elemTemporalRange.attribute( u"start"_s ), Qt::ISODate );
295 QDateTime end = QDateTime::fromString( elemTemporalRange.attribute( u"end"_s ), Qt::ISODate );
296 setTemporalRange( QgsDateTimeRange( start, end ) );
297
298 QDomElement elem3dAxis = elem.firstChildElement( u"axis3d"_s );
299 m3dAxisSettings.readXml( elem3dAxis, context );
300}
301
302QDomElement Qgs3DMapSettings::writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const
303{
305
306 QDomElement elem = doc.createElement( u"qgis3d"_s );
307
308 QDomElement elemOrigin = doc.createElement( u"origin"_s );
309 elemOrigin.setAttribute( u"x"_s, QString::number( mOrigin.x() ) );
310 elemOrigin.setAttribute( u"y"_s, QString::number( mOrigin.y() ) );
311 elemOrigin.setAttribute( u"z"_s, QString::number( mOrigin.z() ) );
312 elem.appendChild( elemOrigin );
313
314 QDomElement elemExtent = doc.createElement( u"extent"_s );
315 elemExtent.setAttribute( u"xMin"_s, mExtent.xMinimum() );
316 elemExtent.setAttribute( u"yMin"_s, mExtent.yMinimum() );
317 elemExtent.setAttribute( u"xMax"_s, mExtent.xMaximum() );
318 elemExtent.setAttribute( u"yMax"_s, mExtent.yMaximum() );
319 elemExtent.setAttribute( u"showIn2dView"_s, mShowExtentIn2DView );
320 elem.appendChild( elemExtent );
321
322 QDomElement elemCamera = doc.createElement( u"camera"_s );
323 elemCamera.setAttribute( u"field-of-view"_s, mFieldOfView );
324 elemCamera.setAttribute( u"projection-type"_s, static_cast<int>( mProjectionType ) );
325 switch ( mCameraNavigationMode )
326 {
328 elemCamera.setAttribute( u"camera-navigation-mode"_s, u"terrain-based-navigation"_s );
329 break;
331 elemCamera.setAttribute( u"camera-navigation-mode"_s, u"walk-navigation"_s );
332 break;
334 elemCamera.setAttribute( u"camera-navigation-mode"_s, u"globe-terrain-based-navigation"_s );
335 break;
336 }
337 elemCamera.setAttribute( u"camera-movement-speed"_s, mCameraMovementSpeed );
338 elem.appendChild( elemCamera );
339
340 QDomElement elemColor = doc.createElement( u"color"_s );
341 elemColor.setAttribute( u"background"_s, QgsColorUtils::colorToString( mBackgroundColor ) );
342 elemColor.setAttribute( u"selection"_s, QgsColorUtils::colorToString( mSelectionColor ) );
343 elem.appendChild( elemColor );
344
345 QDomElement elemCrs = doc.createElement( u"crs"_s );
346 mCrs.writeXml( elemCrs, doc );
347 elem.appendChild( elemCrs );
348
349 QDomElement elemTerrain = doc.createElement( u"terrain"_s );
350 elemTerrain.setAttribute( u"terrain-rendering-enabled"_s, mTerrainRenderingEnabled ? 1 : 0 );
351 elemTerrain.setAttribute( u"shading-enabled"_s, mTerrainShadingEnabled ? 1 : 0 );
352
353 QDomElement elemTerrainShadingMaterial = doc.createElement( u"shading-material"_s );
354 mTerrainShadingMaterial.writeXml( elemTerrainShadingMaterial, context );
355 elemTerrain.appendChild( elemTerrainShadingMaterial );
356 elemTerrain.setAttribute( u"map-theme"_s, mTerrainMapTheme );
357 elemTerrain.setAttribute( u"show-labels"_s, mShowLabels ? 1 : 0 );
358
359 {
360 QDomElement elemLights = doc.createElement( u"lights"_s );
361 for ( const QgsLightSource *light : mLightSources )
362 {
363 const QDomElement elemLight = light->writeXml( doc, context );
364 elemLights.appendChild( elemLight );
365 }
366 elem.appendChild( elemLights );
367 }
368
369 QDomElement elemMapLayers = doc.createElement( u"layers"_s );
370 for ( const QgsMapLayerRef &layerRef : mLayers )
371 {
372 QDomElement elemMapLayer = doc.createElement( u"layer"_s );
373 elemMapLayer.setAttribute( u"id"_s, layerRef.layerId );
374 elemMapLayers.appendChild( elemMapLayer );
375 }
376 elemTerrain.appendChild( elemMapLayers );
377
378 QDomElement elemTerrainGenerator = doc.createElement( u"generator"_s );
379 elemTerrainGenerator.setAttribute( u"type"_s, mTerrainSettings->type() );
380 mTerrainSettings->writeXml( elemTerrain, context );
381 elemTerrain.appendChild( elemTerrainGenerator );
382 elem.appendChild( elemTerrain );
383
384 QDomElement elemSkybox = doc.createElement( u"skybox"_s );
385 elemSkybox.setAttribute( u"skybox-enabled"_s, mIsSkyboxEnabled );
386 mSkyboxSettings.writeXml( elemSkybox, context );
387 elem.appendChild( elemSkybox );
388
389 QDomElement elemShadows = doc.createElement( u"shadow-rendering"_s );
390 mShadowSettings.writeXml( elemShadows, context );
391 elem.appendChild( elemShadows );
392
393 QDomElement elemAmbientOcclusion = doc.createElement( u"screen-space-ambient-occlusion"_s );
394 mAmbientOcclusionSettings.writeXml( elemAmbientOcclusion, context );
395 elem.appendChild( elemAmbientOcclusion );
396
397 QDomElement elemDebug = doc.createElement( u"debug"_s );
398 elemDebug.setAttribute( u"bounding-boxes"_s, mShowTerrainBoundingBoxes ? 1 : 0 );
399 elemDebug.setAttribute( u"terrain-tile-info"_s, mShowTerrainTileInfo ? 1 : 0 );
400 elemDebug.setAttribute( u"camera-view-center"_s, mShowCameraViewCenter ? 1 : 0 );
401 elemDebug.setAttribute( u"camera-rotation-center"_s, mShowCameraRotationCenter ? 1 : 0 );
402 elemDebug.setAttribute( u"show-light-sources"_s, mShowLightSources ? 1 : 0 );
403 elemDebug.setAttribute( u"show-fps-counter"_s, mIsFpsCounterEnabled ? 1 : 0 );
404 elemDebug.setAttribute( u"stop-updates"_s, mStopUpdates ? 1 : 0 );
405 elemDebug.setAttribute( u"debug-panel"_s, mShowDebugPanel ? 1 : 0 );
406 elem.appendChild( elemDebug );
407
408 QDomElement elemEyeDomeLighting = doc.createElement( u"eye-dome-lighting"_s );
409 elemEyeDomeLighting.setAttribute( u"enabled"_s, mEyeDomeLightingEnabled ? 1 : 0 );
410 elemEyeDomeLighting.setAttribute( u"eye-dome-lighting-strength"_s, mEyeDomeLightingStrength );
411 elemEyeDomeLighting.setAttribute( u"eye-dome-lighting-distance"_s, mEyeDomeLightingDistance );
412 elem.appendChild( elemEyeDomeLighting );
413
414 QDomElement elemNavigationSync = doc.createElement( u"navigation-sync"_s );
415 elemNavigationSync.setAttribute( u"view-sync-mode"_s, ( int ) mViewSyncMode );
416 elemNavigationSync.setAttribute( u"view-frustum-visualization-enabled"_s, mVisualizeViewFrustum ? 1 : 0 );
417 elem.appendChild( elemNavigationSync );
418
419 QDomElement elemDebugSettings = doc.createElement( u"debug-settings"_s );
420 elemDebugSettings.setAttribute( u"shadowmap-enabled"_s, mDebugShadowMapEnabled );
421 elemDebugSettings.setAttribute( u"shadowmap-corner"_s, mDebugShadowMapCorner );
422 elemDebugSettings.setAttribute( u"shadowmap-size"_s, mDebugShadowMapSize );
423 elemDebugSettings.setAttribute( u"depthmap-enabled"_s, mDebugDepthMapEnabled );
424 elemDebugSettings.setAttribute( u"depthmap-corner"_s, mDebugDepthMapCorner );
425 elemDebugSettings.setAttribute( u"depthmap-size"_s, mDebugDepthMapSize );
426 elem.appendChild( elemDebugSettings );
427
428 QDomElement elemTemporalRange = doc.createElement( u"temporal-range"_s );
429 elemTemporalRange.setAttribute( u"start"_s, temporalRange().begin().toString( Qt::ISODate ) );
430 elemTemporalRange.setAttribute( u"end"_s, temporalRange().end().toString( Qt::ISODate ) );
431
432 QDomElement elem3dAxis = doc.createElement( u"axis3d"_s );
433 m3dAxisSettings.writeXml( elem3dAxis, context );
434 elem.appendChild( elem3dAxis );
435
436 return elem;
437}
438
440{
442
443 for ( int i = 0; i < mLayers.count(); ++i )
444 {
445 QgsMapLayerRef &layerRef = mLayers[i];
446 layerRef.setLayer( project.mapLayer( layerRef.layerId ) );
447 }
448
449 if ( mTerrainSettings )
450 {
451 mTerrainSettings->resolveReferences( &project );
452
453 std::unique_ptr<QgsTerrainGenerator> terrainGenerator = mTerrainSettings->createTerrainGenerator( Qgs3DRenderContext::fromMapSettings( this ) );
454 if ( terrainGenerator )
455 {
457 }
459 }
460}
461
463{
465
467 {
468 QgsDebugError( u"extent() should not be used with globe!"_s );
469 }
470
471 return mExtent;
472}
473
475{
477
478 if ( extent == mExtent )
479 return;
480
482 {
483 QgsDebugError( u"setExtent() should not be used with globe!"_s );
484 }
485
486 mExtent = extent;
487 const QgsPointXY center = mExtent.center();
488 setOrigin( QgsVector3D( center.x(), center.y(), 0 ) );
489 if ( mTerrainGenerator )
490 {
491 QgsRectangle terrainExtent = Qgs3DUtils::tryReprojectExtent2D( mExtent, mCrs, mTerrainGenerator->crs(), mTransformContext );
492 mTerrainGenerator->setExtent( terrainExtent );
493 }
494 emit extentChanged();
495}
496
498{
500
501 if ( origin == mOrigin )
502 return;
503
504 mOrigin = origin;
505 emit originChanged();
506}
507
509{
511
512 return mOrigin;
513}
514
521
528
530{
532
533 mCrs = crs;
534
535 // for convenience, make sure the navigation mode is consistent with the scene mode
536 if ( sceneMode() == Qgis::SceneMode::Globe && mCameraNavigationMode == Qgis::NavigationMode::TerrainBased )
537 {
539 }
540 else if ( sceneMode() == Qgis::SceneMode::Local && mCameraNavigationMode == Qgis::NavigationMode::GlobeTerrainBased )
541 {
543 }
544}
545
552
559
566
568{
570
571 mTransformContext = context;
572}
573
575{
577
578 return mPathResolver;
579}
580
582{
584
585 mPathResolver = resolver;
586}
587
594
596{
598
599 mMapThemes = mapThemes;
600}
601
602void Qgs3DMapSettings::setBackgroundColor( const QColor &color )
603{
605
606 if ( color == mBackgroundColor )
607 return;
608
609 mBackgroundColor = color;
611}
612
614{
616
617 return mBackgroundColor;
618}
619
620void Qgs3DMapSettings::setSelectionColor( const QColor &color )
621{
623
624 if ( color == mSelectionColor )
625 return;
626
627 mSelectionColor = color;
629}
630
632{
634
635 return mSelectionColor;
636}
637
639{
641
642 if ( zScale == mTerrainSettings->verticalScale() )
643 return;
644
645 mTerrainSettings->setVerticalScale( zScale );
650}
651
653{
655
656 return mTerrainSettings->verticalScale();
657}
658
659void Qgs3DMapSettings::setLayers( const QList<QgsMapLayer *> &layers )
660{
662
663 const QList<QgsMapLayer *> raw = _qgis_listRefToRaw( mLayers );
664
665 if ( layers == raw )
666 return;
667
668 mLayers = _qgis_listRawToRef( layers );
669 emit layersChanged();
670}
671
672QList<QgsMapLayer *> Qgs3DMapSettings::layers() const
673{
675
676 QList<QgsMapLayer *> lst;
677 lst.reserve( mLayers.count() );
678 for ( const QgsMapLayerRef &layerRef : mLayers )
679 {
680 if ( layerRef.layer )
681 lst.append( layerRef.layer );
682 }
683 return lst;
684}
685
687{
689
690 setExtent( fullExtent );
691
692 std::unique_ptr<QgsAbstractTerrainSettings> terrainSettings( Qgs3D::terrainRegistry()->configureTerrainFromProject( properties ) );
693 if ( terrainSettings )
694 {
696 }
697}
698
700{
702
703 return mTerrainSettings.get();
704}
705
707{
709
710 bool hasChanged = false;
711 if ( settings == mTerrainSettings.get() )
712 {
713 // emit signals anyway. We don't know if the caller changed settings on the pointer before calling this..
714 hasChanged = true;
715 }
716 else
717 {
718 // ensure to generate the terrain if the settings have changed or if the terrain has never been generated.
719 hasChanged = !settings->equals( mTerrainSettings.get() ) || !mTerrainGenerator;
720 mTerrainSettings.reset( settings );
721 }
722
723 if ( hasChanged )
724 {
725 std::unique_ptr<QgsTerrainGenerator> terrainGenerator = mTerrainSettings->createTerrainGenerator( Qgs3DRenderContext::fromMapSettings( this ) );
726 if ( terrainGenerator )
727 {
729 }
730
731 // emit all the signals, we don't know exactly what's changed
736 emit terrainElevationOffsetChanged( mTerrainSettings->elevationOffset() );
739
741 }
742}
743
745{
747
748 if ( mTerrainSettings->mapTileResolution() == res )
749 return;
750
751 mTerrainSettings->setMapTileResolution( res );
756}
757
759{
761
762 return mTerrainSettings->mapTileResolution();
763}
764
766{
768
769 if ( mTerrainSettings->maximumScreenError() == error )
770 return;
771
772 mTerrainSettings->setMaximumScreenError( error );
777}
778
780{
782
783 return mTerrainSettings->maximumScreenError();
784}
785
787{
789
790 if ( mTerrainSettings->maximumGroundError() == error )
791 return;
792
793 mTerrainSettings->setMaximumGroundError( error );
797
799}
800
802{
804
805 if ( mTerrainSettings->elevationOffset() == offset )
806 return;
807 mTerrainSettings->setElevationOffset( offset );
809 emit terrainElevationOffsetChanged( offset );
812}
813
815{
817
818 return mTerrainSettings->elevationOffset();
819}
820
822{
824
825 return mTerrainSettings->maximumGroundError();
826}
827
829{
831
832 if ( mTerrainGenerator )
833 {
834 disconnect( mTerrainGenerator.get(), &QgsTerrainGenerator::terrainChanged, this, &Qgs3DMapSettings::terrainGeneratorChanged );
835 }
836
837 if ( gen->crs().isValid() ) // Don't bother setting an extent rect in the wrong CRS
838 {
839 QgsRectangle terrainExtent = Qgs3DUtils::tryReprojectExtent2D( mExtent, mCrs, gen->crs(), mTransformContext );
840 gen->setExtent( terrainExtent );
841 }
842 mTerrainGenerator.reset( gen );
843 connect( mTerrainGenerator.get(), &QgsTerrainGenerator::terrainChanged, this, &Qgs3DMapSettings::terrainGeneratorChanged );
844
846}
847
849{
851
852 return mTerrainGenerator.get();
853}
854
856{
858
859 if ( mTerrainShadingEnabled == enabled )
860 return;
861
862 mTerrainShadingEnabled = enabled;
864}
865
867{
869
870 return mTerrainShadingEnabled;
871}
872
874{
876
877 if ( mTerrainShadingMaterial == material )
878 return;
879
880 mTerrainShadingMaterial = material;
882}
883
890
891void Qgs3DMapSettings::setTerrainMapTheme( const QString &theme )
892{
894
895 if ( mTerrainMapTheme == theme )
896 return;
897
898 mTerrainMapTheme = theme;
900}
901
903{
905
906 return mTerrainMapTheme;
907}
908
910{
912
913 if ( mShowTerrainBoundingBoxes == enabled )
914 return;
915
916 mShowTerrainBoundingBoxes = enabled;
918}
919
921{
923
924 return mShowTerrainBoundingBoxes;
925}
926
927
929{
931
932 if ( mShowTerrainTileInfo == enabled )
933 return;
934
935 mShowTerrainTileInfo = enabled;
937}
938
940{
942
943 return mShowTerrainTileInfo;
944}
945
947{
949
950 if ( mShowCameraViewCenter == enabled )
951 return;
952
953 mShowCameraViewCenter = enabled;
955}
956
958{
960
961 return mShowCameraViewCenter;
962}
963
965{
967
968 if ( mShowCameraRotationCenter == enabled )
969 return;
970
971 mShowCameraRotationCenter = enabled;
973}
974
976{
978
979 return mShowCameraRotationCenter;
980}
981
983{
985
986 if ( mShowLightSources == enabled )
987 return;
988
989 mShowLightSources = enabled;
991}
992
994{
996
997 return mShowLightSources;
998}
999
1001{
1003
1004 if ( mShowLabels == enabled )
1005 return;
1006
1007 mShowLabels = enabled;
1008 emit showLabelsChanged();
1009}
1010
1012{
1014
1015 return mShowLabels;
1016}
1017
1019{
1021
1022 if ( mStopUpdates == enabled )
1023 return;
1024
1025 mStopUpdates = enabled;
1026 emit stopUpdatesChanged();
1027}
1028
1030{
1032
1033 return mStopUpdates;
1034}
1035
1037{
1039
1040 if ( mEyeDomeLightingEnabled == enabled )
1041 return;
1042 mEyeDomeLightingEnabled = enabled;
1044}
1045
1047{
1049
1050 return mEyeDomeLightingEnabled;
1051}
1052
1054{
1056
1057 if ( mEyeDomeLightingStrength == strength )
1058 return;
1059 mEyeDomeLightingStrength = strength;
1061}
1062
1064{
1066
1067 return mEyeDomeLightingStrength;
1068}
1069
1071{
1073
1074 if ( mEyeDomeLightingDistance == distance )
1075 return;
1076 mEyeDomeLightingDistance = distance;
1078}
1079
1081{
1083
1084 return mEyeDomeLightingDistance;
1085}
1086
1087QList<QgsLightSource *> Qgs3DMapSettings::lightSources() const
1088{
1090
1091 return mLightSources;
1092}
1093
1094void Qgs3DMapSettings::setLightSources( const QList<QgsLightSource *> &lights )
1095{
1097
1098 // have lights actually changed?
1099 if ( mLightSources.count() == lights.count() )
1100 {
1101 bool same = true;
1102 for ( int i = 0; i < mLightSources.count(); ++i )
1103 {
1104 if ( mLightSources[i]->type() == lights[i]->type() )
1105 {
1106 switch ( mLightSources[i]->type() )
1107 {
1109 if ( *static_cast<QgsPointLightSettings *>( mLightSources[i] ) == *static_cast<QgsPointLightSettings *>( lights[i] ) )
1110 continue;
1111 break;
1113 if ( *static_cast<QgsDirectionalLightSettings *>( mLightSources[i] ) == *static_cast<QgsDirectionalLightSettings *>( lights[i] ) )
1114 continue;
1115 break;
1116 }
1117 }
1118 same = false;
1119 break;
1120 }
1121 if ( same )
1122 {
1123 qDeleteAll( lights );
1124 return;
1125 }
1126 }
1127
1128 qDeleteAll( mLightSources );
1129 mLightSources = lights;
1130
1132 emit pointLightsChanged();
1133 emit lightSourcesChanged();
1134}
1135
1137{
1139
1140 return mFieldOfView;
1141}
1142
1144{
1146
1147 if ( mFieldOfView == fieldOfView )
1148 return;
1149
1150 mFieldOfView = fieldOfView;
1151 emit fieldOfViewChanged();
1152}
1153
1154Qt3DRender::QCameraLens::ProjectionType Qgs3DMapSettings::projectionType() const
1155{
1157
1158 return mProjectionType;
1159}
1160
1161void Qgs3DMapSettings::setProjectionType( const Qt3DRender::QCameraLens::ProjectionType projectionType )
1162{
1164
1165 if ( mProjectionType == projectionType )
1166 return;
1167
1168 mProjectionType = projectionType;
1169 emit projectionTypeChanged();
1170}
1171
1173{
1175
1176 return mCameraNavigationMode;
1177}
1178
1180{
1182
1183 if ( mCameraNavigationMode == navigationMode )
1184 return;
1185
1186 mCameraNavigationMode = navigationMode;
1188}
1189
1191{
1193
1194 return mCameraMovementSpeed;
1195}
1196
1198{
1200
1201 if ( mCameraMovementSpeed == movementSpeed )
1202 return;
1203
1204 mCameraMovementSpeed = movementSpeed;
1206}
1207
1208void Qgs3DMapSettings::setOutputDpi( const double dpi )
1209{
1211
1212 mDpi = dpi;
1213}
1214
1216{
1218
1219 return mDpi;
1220}
1221
1223{
1225
1226 return mSkyboxSettings;
1227}
1228
1230{
1232
1233 return mShadowSettings;
1234}
1235
1237{
1239
1240 return mAmbientOcclusionSettings;
1241}
1242
1250
1258
1266
1268{
1270
1271 return mIsSkyboxEnabled;
1272}
1273
1275{
1277
1278 mIsSkyboxEnabled = enabled;
1279}
1280
1282{
1284
1285 return mIsFpsCounterEnabled;
1286}
1287
1288void Qgs3DMapSettings::setShowDebugPanel( const bool enabled )
1289{
1291
1292 if ( mShowDebugPanel == enabled )
1293 return;
1294
1295 mShowDebugPanel = enabled;
1296 emit showDebugPanelChanged( enabled );
1297}
1298
1300{
1302
1303 return mShowDebugPanel;
1304}
1305
1306void Qgs3DMapSettings::setDebugShadowMapSettings( bool enabled, Qt::Corner corner, double size )
1307{
1309
1310 mDebugShadowMapEnabled = enabled;
1311 mDebugShadowMapCorner = corner;
1312 mDebugShadowMapSize = size;
1314}
1315
1317{
1319
1320 return mDebugShadowMapEnabled;
1321}
1322
1324{
1326
1327 return mDebugShadowMapCorner;
1328}
1329
1331{
1333
1334 return mDebugShadowMapSize;
1335}
1336
1337void Qgs3DMapSettings::setDebugDepthMapSettings( bool enabled, Qt::Corner corner, double size )
1338{
1340
1341 mDebugDepthMapEnabled = enabled;
1342 mDebugDepthMapCorner = corner;
1343 mDebugDepthMapSize = size;
1345}
1346
1348{
1350
1351 return mDebugDepthMapEnabled;
1352}
1353
1355{
1357
1358 return mDebugDepthMapCorner;
1359}
1360
1362{
1364
1365 return mDebugDepthMapSize;
1366}
1367
1368void Qgs3DMapSettings::setIsFpsCounterEnabled( bool fpsCounterEnabled )
1369{
1371
1372 if ( fpsCounterEnabled == mIsFpsCounterEnabled )
1373 return;
1374 mIsFpsCounterEnabled = fpsCounterEnabled;
1375 emit fpsCounterEnabledChanged( mIsFpsCounterEnabled );
1376}
1377
1379{
1381
1382 return mTerrainRenderingEnabled;
1383}
1384
1386{
1388
1389 if ( terrainRenderingEnabled == mTerrainRenderingEnabled )
1390 return;
1391 mTerrainRenderingEnabled = terrainRenderingEnabled;
1393}
1394
1396{
1398
1399 return mRendererUsage;
1400}
1401
1408
1415
1417{
1419
1420 mViewSyncMode = mode;
1421}
1422
1424{
1426
1427 return mVisualizeViewFrustum;
1428}
1429
1431{
1433
1434 if ( mVisualizeViewFrustum != enabled )
1435 {
1436 mVisualizeViewFrustum = enabled;
1438 }
1439}
1440
1442{
1444
1445 return m3dAxisSettings;
1446}
1447
1448void Qgs3DMapSettings::setIsDebugOverlayEnabled( bool debugOverlayEnabled )
1449{
1451
1452 if ( debugOverlayEnabled == mIsDebugOverlayEnabled )
1453 return;
1454
1455 mIsDebugOverlayEnabled = debugOverlayEnabled;
1456 emit debugOverlayEnabledChanged( mIsDebugOverlayEnabled );
1457}
1458
1460{
1462
1463 return mShowExtentIn2DView;
1464}
1465
1466void Qgs3DMapSettings::connectChangedSignalsToSettingsChanged()
1467{
1469
1501}
1502
1503
1504void Qgs3DMapSettings::set3DAxisSettings( const Qgs3DAxisSettings &axisSettings, bool force )
1505{
1507
1508 if ( axisSettings == m3dAxisSettings )
1509 {
1510 if ( force )
1511 {
1512 // ie. refresh. We need to disconnect and to reconnect to avoid 'dirty' project
1514 emit axisSettingsChanged();
1516 }
1517 }
1518 else
1519 {
1520 m3dAxisSettings = axisSettings;
1521 emit axisSettingsChanged();
1522 }
1523}
1524
1526{
1528
1529 return mIsDebugOverlayEnabled;
1530}
1531
1533{
1535
1536 if ( show == mShowExtentIn2DView )
1537 return;
1538
1539 mShowExtentIn2DView = show;
1541}
@ Geocentric
Geocentric CRS.
Definition qgis.h:2388
QFlags< ViewSyncModeFlag > ViewSyncModeFlags
Definition qgis.h:3541
NavigationMode
The navigation mode used by 3D cameras.
Definition qgis.h:4214
@ TerrainBased
The default navigation based on the terrain.
Definition qgis.h:4215
@ Walk
Uses WASD keys or arrows to navigate in walking (first person) manner.
Definition qgis.h:4216
@ GlobeTerrainBased
Navigation similar to TerrainBased, but for use with globe.
Definition qgis.h:4217
RendererUsage
Usage of the renderer.
Definition qgis.h:3504
SceneMode
The 3D scene mode used in 3D map views.
Definition qgis.h:4227
@ Globe
Scene is represented as a globe using a geocentric CRS.
Definition qgis.h:4229
@ Local
Local scene based on a projected CRS.
Definition qgis.h:4228
@ Point
Point light source.
Definition qgis.h:4203
@ Directional
Directional light source.
Definition qgis.h:4204
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.
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.
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:112
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:7451
#define Q_NOWARN_DEPRECATED_PUSH
Definition qgis.h:7450
#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.