21 #include "qgsmeshterraingenerator.h"
27 #include <QDomDocument>
28 #include <QDomElement>
36 , mOrigin( other.mOrigin )
38 , mBackgroundColor( other.mBackgroundColor )
39 , mSelectionColor( other.mSelectionColor )
40 , mTerrainVerticalScale( other.mTerrainVerticalScale )
41 , mTerrainGenerator( other.mTerrainGenerator ? other.mTerrainGenerator->clone() : nullptr )
42 , mMapTileResolution( other.mMapTileResolution )
43 , mMaxTerrainScreenError( other.mMaxTerrainScreenError )
44 , mMaxTerrainGroundError( other.mMaxTerrainGroundError )
45 , mTerrainElevationOffset( other.mTerrainElevationOffset )
46 , mTerrainShadingEnabled( other.mTerrainShadingEnabled )
47 , mTerrainShadingMaterial( other.mTerrainShadingMaterial )
48 , mTerrainMapTheme( other.mTerrainMapTheme )
49 , mShowTerrainBoundingBoxes( other.mShowTerrainBoundingBoxes )
50 , mShowTerrainTileInfo( other.mShowTerrainTileInfo )
51 , mShowCameraViewCenter( other.mShowCameraViewCenter )
52 , mShowLightSources( other.mShowLightSources )
53 , mShowLabels( other.mShowLabels )
54 , mPointLights( other.mPointLights )
55 , mDirectionalLights( other.mDirectionalLights )
56 , mFieldOfView( other.mFieldOfView )
57 , mProjectionType( other.mProjectionType )
58 , mCameraNavigationMode( other.mCameraNavigationMode )
59 , mCameraMovementSpeed( other.mCameraMovementSpeed )
60 , mLayers( other.mLayers )
61 , mTerrainLayers( other.mTerrainLayers )
63 , mTransformContext( other.mTransformContext )
64 , mPathResolver( other.mPathResolver )
65 , mMapThemes( other.mMapThemes )
67 , mIsFpsCounterEnabled( other.mIsFpsCounterEnabled )
68 , mIsSkyboxEnabled( other.mIsSkyboxEnabled )
69 , mSkyboxSettings( other.mSkyboxSettings )
70 , mShadowSettings( other.mShadowSettings )
71 , mEyeDomeLightingEnabled( other.mEyeDomeLightingEnabled )
72 , mEyeDomeLightingStrength( other.mEyeDomeLightingStrength )
73 , mEyeDomeLightingDistance( other.mEyeDomeLightingDistance )
74 , mDebugShadowMapEnabled( other.mDebugShadowMapEnabled )
75 , mDebugShadowMapCorner( other.mDebugShadowMapCorner )
76 , mDebugShadowMapSize( other.mDebugShadowMapSize )
77 , mDebugDepthMapEnabled( other.mDebugDepthMapEnabled )
78 , mDebugDepthMapCorner( other.mDebugDepthMapCorner )
79 , mDebugDepthMapSize( other.mDebugDepthMapSize )
83 mRenderers << renderer->clone();
89 qDeleteAll( mRenderers );
94 QDomElement elemOrigin = elem.firstChildElement( QStringLiteral(
"origin" ) );
96 elemOrigin.attribute( QStringLiteral(
"x" ) ).toDouble(),
97 elemOrigin.attribute( QStringLiteral(
"y" ) ).toDouble(),
98 elemOrigin.attribute( QStringLiteral(
"z" ) ).toDouble() );
100 QDomElement elemCamera = elem.firstChildElement( QStringLiteral(
"camera" ) );
101 if ( !elemCamera.isNull() )
103 mFieldOfView = elemCamera.attribute( QStringLiteral(
"field-of-view" ), QStringLiteral(
"45" ) ).toFloat();
104 mProjectionType =
static_cast< Qt3DRender::QCameraLens::ProjectionType
>( elemCamera.attribute( QStringLiteral(
"projection-type" ), QStringLiteral(
"1" ) ).toInt() );
105 QString
cameraNavigationMode = elemCamera.attribute( QStringLiteral(
"camera-navigation-mode" ), QStringLiteral(
"basic-navigation" ) );
107 mCameraNavigationMode = QgsCameraController::NavigationMode::TerrainBasedNavigation;
109 mCameraNavigationMode = QgsCameraController::NavigationMode::WalkNavigation;
110 mCameraMovementSpeed = elemCamera.attribute( QStringLiteral(
"camera-movement-speed" ), QStringLiteral(
"5.0" ) ).toDouble();
113 QDomElement elemColor = elem.firstChildElement( QStringLiteral(
"color" ) );
114 if ( !elemColor.isNull() )
120 QDomElement elemCrs = elem.firstChildElement( QStringLiteral(
"crs" ) );
123 QDomElement elemTerrain = elem.firstChildElement( QStringLiteral(
"terrain" ) );
124 mTerrainVerticalScale = elemTerrain.attribute( QStringLiteral(
"exaggeration" ), QStringLiteral(
"1" ) ).toFloat();
125 mMapTileResolution = elemTerrain.attribute( QStringLiteral(
"texture-size" ), QStringLiteral(
"512" ) ).toInt();
126 mMaxTerrainScreenError = elemTerrain.attribute( QStringLiteral(
"max-terrain-error" ), QStringLiteral(
"3" ) ).toFloat();
127 mMaxTerrainGroundError = elemTerrain.attribute( QStringLiteral(
"max-ground-error" ), QStringLiteral(
"1" ) ).toFloat();
128 mTerrainShadingEnabled = elemTerrain.attribute( QStringLiteral(
"shading-enabled" ), QStringLiteral(
"0" ) ).toInt();
129 mTerrainElevationOffset = elemTerrain.attribute( QStringLiteral(
"elevation-offset" ), QStringLiteral(
"0.0" ) ).toFloat();
131 QDomElement elemTerrainShadingMaterial = elemTerrain.firstChildElement( QStringLiteral(
"shading-material" ) );
132 if ( !elemTerrainShadingMaterial.isNull() )
133 mTerrainShadingMaterial.
readXml( elemTerrainShadingMaterial, context );
134 mTerrainMapTheme = elemTerrain.attribute( QStringLiteral(
"map-theme" ) );
135 mShowLabels = elemTerrain.attribute( QStringLiteral(
"show-labels" ), QStringLiteral(
"0" ) ).toInt();
137 mPointLights.clear();
138 QDomElement elemPointLights = elem.firstChildElement( QStringLiteral(
"point-lights" ) );
139 if ( !elemPointLights.isNull() )
141 QDomElement elemPointLight = elemPointLights.firstChildElement( QStringLiteral(
"point-light" ) );
142 while ( !elemPointLight.isNull() )
145 pointLight.
readXml( elemPointLight );
146 mPointLights << pointLight;
147 elemPointLight = elemPointLight.nextSiblingElement( QStringLiteral(
"point-light" ) );
155 mPointLights << defaultLight;
158 mDirectionalLights.clear();
159 QDomElement elemDirectionalLights = elem.firstChildElement( QStringLiteral(
"directional-lights" ) );
160 if ( !elemDirectionalLights.isNull() )
162 QDomElement elemDirectionalLight = elemDirectionalLights.firstChildElement( QStringLiteral(
"directional-light" ) );
163 while ( !elemDirectionalLight.isNull() )
166 directionalLight.
readXml( elemDirectionalLight );
167 mDirectionalLights << directionalLight;
168 elemDirectionalLight = elemDirectionalLight.nextSiblingElement( QStringLiteral(
"directional-light" ) );
172 QDomElement elemMapLayers = elemTerrain.firstChildElement( QStringLiteral(
"layers" ) );
173 QDomElement elemMapLayer = elemMapLayers.firstChildElement( QStringLiteral(
"layer" ) );
174 QList<QgsMapLayerRef> mapLayers;
175 while ( !elemMapLayer.isNull() )
177 mapLayers <<
QgsMapLayerRef( elemMapLayer.attribute( QStringLiteral(
"id" ) ) );
178 elemMapLayer = elemMapLayer.nextSiblingElement( QStringLiteral(
"layer" ) );
182 QDomElement elemTerrainLayers = elemTerrain.firstChildElement( QStringLiteral(
"terrainLayers" ) );
183 if ( elemTerrainLayers.isNull() )
185 mTerrainLayers = mLayers;
189 QDomElement elemTerrainMapLayer = elemTerrainLayers.firstChildElement( QStringLiteral(
"layer" ) );
190 QList<QgsMapLayerRef> terrainMapLayers;
191 while ( !elemTerrainMapLayer.isNull() )
193 terrainMapLayers <<
QgsMapLayerRef( elemTerrainMapLayer.attribute( QStringLiteral(
"id" ) ) );
194 elemTerrainMapLayer = elemTerrainMapLayer.nextSiblingElement( QStringLiteral(
"layer" ) );
196 mTerrainLayers = mapLayers;
199 QDomElement elemTerrainGenerator = elemTerrain.firstChildElement( QStringLiteral(
"generator" ) );
200 QString terrainGenType = elemTerrainGenerator.attribute( QStringLiteral(
"type" ) );
201 if ( terrainGenType == QLatin1String(
"dem" ) )
204 demTerrainGenerator->
setCrs( mCrs, mTransformContext );
205 mTerrainGenerator.reset( demTerrainGenerator );
207 else if ( terrainGenType == QLatin1String(
"online" ) )
210 onlineTerrainGenerator->
setCrs( mCrs, mTransformContext );
211 mTerrainGenerator.reset( onlineTerrainGenerator );
213 else if ( terrainGenType == QLatin1String(
"mesh" ) )
215 QgsMeshTerrainGenerator *meshTerrainGenerator =
new QgsMeshTerrainGenerator;
216 meshTerrainGenerator->setCrs( mCrs, mTransformContext );
217 mTerrainGenerator.reset( meshTerrainGenerator );
223 mTerrainGenerator.reset( flatGen );
225 mTerrainGenerator->readXml( elemTerrainGenerator );
227 qDeleteAll( mRenderers );
230 QDomElement elemRenderers = elem.firstChildElement( QStringLiteral(
"renderers" ) );
231 QDomElement elemRenderer = elemRenderers.firstChildElement( QStringLiteral(
"renderer" ) );
232 while ( !elemRenderer.isNull() )
235 QString type = elemRenderer.attribute( QStringLiteral(
"type" ) );
236 if ( type == QLatin1String(
"vector" ) )
240 else if ( type == QLatin1String(
"mesh" ) )
244 else if ( type == QLatin1String(
"pointcloud" ) )
251 renderer->
readXml( elemRenderer, context );
252 mRenderers.append( renderer );
254 elemRenderer = elemRenderer.nextSiblingElement( QStringLiteral(
"renderer" ) );
257 QDomElement elemSkybox = elem.firstChildElement( QStringLiteral(
"skybox" ) );
258 mIsSkyboxEnabled = elemSkybox.attribute( QStringLiteral(
"skybox-enabled" ) ).toInt();
259 mSkyboxSettings.
readXml( elemSkybox, context );
261 QDomElement elemShadows = elem.firstChildElement( QStringLiteral(
"shadow-rendering" ) );
262 mShadowSettings.
readXml( elemShadows, context );
264 QDomElement elemEyeDomeLighting = elem.firstChildElement( QStringLiteral(
"eye-dome-lighting" ) );
265 mEyeDomeLightingEnabled = elemEyeDomeLighting.attribute(
"enabled", QStringLiteral(
"0" ) ).toInt();
266 mEyeDomeLightingStrength = elemEyeDomeLighting.attribute(
"eye-dome-lighting-strength", QStringLiteral(
"1000.0" ) ).toDouble();
267 mEyeDomeLightingDistance = elemEyeDomeLighting.attribute(
"eye-dome-lighting-distance", QStringLiteral(
"1" ) ).toInt();
269 QDomElement elemDebugSettings = elem.firstChildElement( QStringLiteral(
"debug-settings" ) );
270 mDebugShadowMapEnabled = elemDebugSettings.attribute( QStringLiteral(
"shadowmap-enabled" ), QStringLiteral(
"0" ) ).toInt();
271 mDebugShadowMapCorner =
static_cast<Qt::Corner
>( elemDebugSettings.attribute( QStringLiteral(
"shadowmap-corner" ),
"0" ).toInt() );
272 mDebugShadowMapSize = elemDebugSettings.attribute( QStringLiteral(
"shadowmap-size" ), QStringLiteral(
"0.2" ) ).toDouble();
274 mDebugDepthMapEnabled = elemDebugSettings.attribute( QStringLiteral(
"depthmap-enabled" ), QStringLiteral(
"0" ) ).toInt();
275 mDebugDepthMapCorner =
static_cast<Qt::Corner
>( elemDebugSettings.attribute( QStringLiteral(
"depthmap-corner" ), QStringLiteral(
"1" ) ).toInt() );
276 mDebugDepthMapSize = elemDebugSettings.attribute( QStringLiteral(
"depthmap-size" ), QStringLiteral(
"0.2" ) ).toDouble();
278 QDomElement elemDebug = elem.firstChildElement( QStringLiteral(
"debug" ) );
279 mShowTerrainBoundingBoxes = elemDebug.attribute( QStringLiteral(
"bounding-boxes" ), QStringLiteral(
"0" ) ).toInt();
280 mShowTerrainTileInfo = elemDebug.attribute( QStringLiteral(
"terrain-tile-info" ), QStringLiteral(
"0" ) ).toInt();
281 mShowCameraViewCenter = elemDebug.attribute( QStringLiteral(
"camera-view-center" ), QStringLiteral(
"0" ) ).toInt();
282 mShowLightSources = elemDebug.attribute( QStringLiteral(
"show-light-sources" ), QStringLiteral(
"0" ) ).toInt();
283 mIsFpsCounterEnabled = elemDebug.attribute( QStringLiteral(
"show-fps-counter" ), QStringLiteral(
"0" ) ).toInt();
285 QDomElement elemTemporalRange = elem.firstChildElement( QStringLiteral(
"temporal-range" ) );
286 QDateTime start = QDateTime::fromString( elemTemporalRange.attribute( QStringLiteral(
"start" ) ), Qt::ISODate );
287 QDateTime end = QDateTime::fromString( elemTemporalRange.attribute( QStringLiteral(
"end" ) ), Qt::ISODate );
293 QDomElement elem = doc.createElement( QStringLiteral(
"qgis3d" ) );
295 QDomElement elemOrigin = doc.createElement( QStringLiteral(
"origin" ) );
296 elemOrigin.setAttribute( QStringLiteral(
"x" ), QString::number( mOrigin.
x() ) );
297 elemOrigin.setAttribute( QStringLiteral(
"y" ), QString::number( mOrigin.
y() ) );
298 elemOrigin.setAttribute( QStringLiteral(
"z" ), QString::number( mOrigin.
z() ) );
299 elem.appendChild( elemOrigin );
301 QDomElement elemCamera = doc.createElement( QStringLiteral(
"camera" ) );
302 elemCamera.setAttribute( QStringLiteral(
"field-of-view" ), mFieldOfView );
303 elemCamera.setAttribute( QStringLiteral(
"projection-type" ),
static_cast< int >( mProjectionType ) );
304 switch ( mCameraNavigationMode )
307 elemCamera.setAttribute( QStringLiteral(
"camera-navigation-mode" ), QStringLiteral(
"terrain-based-navigation" ) );
310 elemCamera.setAttribute( QStringLiteral(
"camera-navigation-mode" ), QStringLiteral(
"walk-navigation" ) );
313 elemCamera.setAttribute( QStringLiteral(
"camera-movement-speed" ), mCameraMovementSpeed );
314 elem.appendChild( elemCamera );
316 QDomElement elemColor = doc.createElement( QStringLiteral(
"color" ) );
319 elem.appendChild( elemColor );
321 QDomElement elemCrs = doc.createElement( QStringLiteral(
"crs" ) );
323 elem.appendChild( elemCrs );
325 QDomElement elemTerrain = doc.createElement( QStringLiteral(
"terrain" ) );
326 elemTerrain.setAttribute( QStringLiteral(
"exaggeration" ), QString::number( mTerrainVerticalScale ) );
327 elemTerrain.setAttribute( QStringLiteral(
"texture-size" ), mMapTileResolution );
328 elemTerrain.setAttribute( QStringLiteral(
"max-terrain-error" ), QString::number( mMaxTerrainScreenError ) );
329 elemTerrain.setAttribute( QStringLiteral(
"max-ground-error" ), QString::number( mMaxTerrainGroundError ) );
330 elemTerrain.setAttribute( QStringLiteral(
"shading-enabled" ), mTerrainShadingEnabled ? 1 : 0 );
331 elemTerrain.setAttribute( QStringLiteral(
"elevation-offset" ), mTerrainElevationOffset );
333 QDomElement elemTerrainShadingMaterial = doc.createElement( QStringLiteral(
"shading-material" ) );
334 mTerrainShadingMaterial.
writeXml( elemTerrainShadingMaterial, context );
335 elemTerrain.appendChild( elemTerrainShadingMaterial );
336 elemTerrain.setAttribute( QStringLiteral(
"map-theme" ), mTerrainMapTheme );
337 elemTerrain.setAttribute( QStringLiteral(
"show-labels" ), mShowLabels ? 1 : 0 );
339 QDomElement elemPointLights = doc.createElement( QStringLiteral(
"point-lights" ) );
342 QDomElement elemPointLight = pointLight.writeXml( doc );
343 elemPointLights.appendChild( elemPointLight );
345 elem.appendChild( elemPointLights );
347 QDomElement elemDirectionalLights = doc.createElement( QStringLiteral(
"directional-lights" ) );
350 QDomElement elemDirectionalLight = directionalLight.writeXml( doc );
351 elemDirectionalLights.appendChild( elemDirectionalLight );
353 elem.appendChild( elemDirectionalLights );
355 QDomElement elemMapLayers = doc.createElement( QStringLiteral(
"layers" ) );
358 QDomElement elemMapLayer = doc.createElement( QStringLiteral(
"layer" ) );
359 elemMapLayer.setAttribute( QStringLiteral(
"id" ), layerRef.layerId );
360 elemMapLayers.appendChild( elemMapLayer );
362 elemTerrain.appendChild( elemMapLayers );
364 QDomElement elemTerrainMapLayers = doc.createElement( QStringLiteral(
"terrainLayers" ) );
367 QDomElement elemMapLayer = doc.createElement( QStringLiteral(
"layer" ) );
368 elemMapLayer.setAttribute( QStringLiteral(
"id" ), layerRef.layerId );
369 elemTerrainMapLayers.appendChild( elemMapLayer );
371 elemTerrain.appendChild( elemTerrainMapLayers );
373 QDomElement elemTerrainGenerator = doc.createElement( QStringLiteral(
"generator" ) );
375 mTerrainGenerator->writeXml( elemTerrainGenerator );
376 elemTerrain.appendChild( elemTerrainGenerator );
377 elem.appendChild( elemTerrain );
379 QDomElement elemRenderers = doc.createElement( QStringLiteral(
"renderers" ) );
382 QDomElement elemRenderer = doc.createElement( QStringLiteral(
"renderer" ) );
383 elemRenderer.setAttribute( QStringLiteral(
"type" ), renderer->type() );
384 renderer->writeXml( elemRenderer, context );
385 elemRenderers.appendChild( elemRenderer );
387 elem.appendChild( elemRenderers );
389 QDomElement elemSkybox = doc.createElement( QStringLiteral(
"skybox" ) );
390 elemSkybox.setAttribute( QStringLiteral(
"skybox-enabled" ), mIsSkyboxEnabled );
391 mSkyboxSettings.
writeXml( elemSkybox, context );
392 elem.appendChild( elemSkybox );
394 QDomElement elemShadows = doc.createElement( QStringLiteral(
"shadow-rendering" ) );
395 mShadowSettings.
writeXml( elemShadows, context );
396 elem.appendChild( elemShadows );
398 QDomElement elemDebug = doc.createElement( QStringLiteral(
"debug" ) );
399 elemDebug.setAttribute( QStringLiteral(
"bounding-boxes" ), mShowTerrainBoundingBoxes ? 1 : 0 );
400 elemDebug.setAttribute( QStringLiteral(
"terrain-tile-info" ), mShowTerrainTileInfo ? 1 : 0 );
401 elemDebug.setAttribute( QStringLiteral(
"camera-view-center" ), mShowCameraViewCenter ? 1 : 0 );
402 elemDebug.setAttribute( QStringLiteral(
"show-light-sources" ), mShowLightSources ? 1 : 0 );
403 elemDebug.setAttribute( QStringLiteral(
"show-fps-counter" ), mIsFpsCounterEnabled ? 1 : 0 );
404 elem.appendChild( elemDebug );
406 QDomElement elemEyeDomeLighting = doc.createElement( QStringLiteral(
"eye-dome-lighting" ) );
407 elemEyeDomeLighting.setAttribute(
"enabled", mEyeDomeLightingEnabled ? 1 : 0 );
408 elemEyeDomeLighting.setAttribute(
"eye-dome-lighting-strength", mEyeDomeLightingStrength );
409 elemEyeDomeLighting.setAttribute(
"eye-dome-lighting-distance", mEyeDomeLightingDistance );
410 elem.appendChild( elemEyeDomeLighting );
413 QDomElement elemDebugSettings = doc.createElement( QStringLiteral(
"debug-settings" ) );
414 elemDebugSettings.setAttribute( QStringLiteral(
"shadowmap-enabled" ), mDebugShadowMapEnabled );
415 elemDebugSettings.setAttribute( QStringLiteral(
"shadowmap-corner" ), mDebugShadowMapCorner );
416 elemDebugSettings.setAttribute( QStringLiteral(
"shadowmap-size" ), mDebugShadowMapSize );
417 elemDebugSettings.setAttribute( QStringLiteral(
"depthmap-enabled" ), mDebugDepthMapEnabled );
418 elemDebugSettings.setAttribute( QStringLiteral(
"depthmap-corner" ), mDebugDepthMapCorner );
419 elemDebugSettings.setAttribute( QStringLiteral(
"depthmap-size" ), mDebugDepthMapSize );
420 elem.appendChild( elemDebugSettings );
422 QDomElement elemTemporalRange = doc.createElement( QStringLiteral(
"temporal-range" ) );
423 elemTemporalRange.setAttribute( QStringLiteral(
"start" ),
temporalRange().begin().toString( Qt::ISODate ) );
424 elemTemporalRange.setAttribute( QStringLiteral(
"end" ),
temporalRange().end().toString( Qt::ISODate ) );
431 for (
int i = 0; i < mLayers.count(); ++i )
436 for (
int i = 0; i < mTerrainLayers.count(); ++i )
442 mTerrainGenerator->resolveReferences( project );
444 for (
int i = 0; i < mRenderers.count(); ++i )
468 return mTransformContext;
473 mTransformContext = context;
478 if ( color == mBackgroundColor )
481 mBackgroundColor = color;
487 return mBackgroundColor;
492 if ( color == mSelectionColor )
495 mSelectionColor = color;
501 return mSelectionColor;
506 if ( zScale == mTerrainVerticalScale )
509 mTerrainVerticalScale = zScale;
515 return mTerrainVerticalScale;
520 QList<QgsMapLayerRef> lst;
521 lst.reserve(
layers.count() );
527 if ( mLayers == lst )
536 QList<QgsMapLayer *> lst;
537 lst.reserve( mLayers.count() );
540 if ( layerRef.layer )
541 lst.append( layerRef.layer );
548 QList<QgsMapLayerRef> lst;
549 lst.reserve(
layers.count() );
555 if ( mTerrainLayers == lst )
558 mTerrainLayers = lst;
564 QList<QgsMapLayer *> lst;
565 lst.reserve( mTerrainLayers.count() );
568 if ( layerRef.layer )
569 lst.append( layerRef.layer );
576 if ( mMapTileResolution == res )
579 mMapTileResolution = res;
585 return mMapTileResolution;
590 if ( mMaxTerrainScreenError == error )
593 mMaxTerrainScreenError = error;
599 return mMaxTerrainScreenError;
604 if ( mMaxTerrainGroundError == error )
607 mMaxTerrainGroundError = error;
613 if ( mTerrainElevationOffset == offset )
615 mTerrainElevationOffset = offset;
621 return mMaxTerrainGroundError;
626 if ( mTerrainGenerator )
631 mTerrainGenerator.reset( gen );
639 if ( mTerrainShadingEnabled == enabled )
642 mTerrainShadingEnabled = enabled;
648 if ( mTerrainShadingMaterial == material )
651 mTerrainShadingMaterial = material;
657 if ( mTerrainMapTheme == theme )
660 mTerrainMapTheme = theme;
666 qDeleteAll( mRenderers );
675 if ( mShowTerrainBoundingBoxes == enabled )
678 mShowTerrainBoundingBoxes = enabled;
684 if ( mShowTerrainTileInfo == enabled )
687 mShowTerrainTileInfo = enabled;
693 if ( mShowCameraViewCenter == enabled )
696 mShowCameraViewCenter = enabled;
702 if ( mShowLightSources == enabled )
705 mShowLightSources = enabled;
711 if ( mShowLabels == enabled )
714 mShowLabels = enabled;
720 if ( mEyeDomeLightingEnabled == enabled )
722 mEyeDomeLightingEnabled = enabled;
728 if ( mEyeDomeLightingStrength == strength )
730 mEyeDomeLightingStrength = strength;
736 if ( mEyeDomeLightingDistance == distance )
738 mEyeDomeLightingDistance = distance;
780 if ( mCameraNavigationMode == navigationMode )
783 mCameraNavigationMode = navigationMode;
789 if ( mCameraMovementSpeed == movementSpeed )
792 mCameraMovementSpeed = movementSpeed;
810 mDebugShadowMapEnabled = enabled;
811 mDebugShadowMapCorner = corner;
812 mDebugShadowMapSize = size;
818 mDebugDepthMapEnabled = enabled;
819 mDebugDepthMapCorner = corner;
820 mDebugDepthMapSize = size;
826 if ( fpsCounterEnabled == mIsFpsCounterEnabled )
828 mIsFpsCounterEnabled = fpsCounterEnabled;
void setEyeDomeLightingStrength(double strength)
Sets the eye dome lighting strength value.
void mapTileResolutionChanged()
Emitted when the map tile resoulution has changed.
void terrainVerticalScaleChanged()
Emitted when the vertical scale of the terrain has changed.
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the coordinate transform context, which stores various information regarding which datum transfo...
void renderersChanged()
Emitted when the list of map's extra renderers have been modified.
QList< QgsAbstract3DRenderer * > renderers() const
Returns list of extra 3D renderers.
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.
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,...
void setRenderers(const QList< QgsAbstract3DRenderer * > &renderers)
Sets list of extra 3D renderers to use in the scene. Takes ownership of the objects.
Qt3DRender::QCameraLens::ProjectionType projectionType() const
Returns the camera lens' projection type.
void setEyeDomeLightingEnabled(bool enabled)
Sets whether eye dome lighting will be used.
void setFieldOfView(const float fieldOfView)
Sets the camera lens' field of view.
void debugDepthMapSettingsChanged()
Emitted when depth map debugging has changed.
QList< QgsDirectionalLightSettings > directionalLights() const
Returns list of directional lights defined in the scene.
void setPointLights(const QList< QgsPointLightSettings > &pointLights)
Sets list of point lights defined in the scene.
void backgroundColorChanged()
Emitted when the background color has changed.
void showTerrainBoundingBoxesChanged()
Emitted when the flag whether terrain's bounding boxes are shown has changed.
void setDirectionalLights(const QList< QgsDirectionalLightSettings > &directionalLights)
Sets list of directional lights defined in the scene.
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.
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.
void cameraNavigationModeChanged()
Emitted when the camera navigation mode was changed.
void shadowSettingsChanged()
Emitted when shadow rendering settings are changed.
void terrainLayersChanged()
Emitted when the list of map layers for terrain texture has changed.
float maxTerrainGroundError() const
Returns maximum ground error of terrain tiles in world units.
void eyeDomeLightingEnabledChanged()
Emitted when the flag whether eye dome lighting is used has changed.
void setTerrainVerticalScale(double zScale)
Sets vertical scale (exaggeration) of terrain (1 = true scale, > 1 = hills get more pronounced)
void setShowLabels(bool enabled)
Sets whether to display labels on terrain tiles.
double terrainVerticalScale() const
Returns vertical scale (exaggeration) of terrain.
void setMaxTerrainGroundError(float error)
Returns maximum ground error of terrain tiles in world units.
void setSkyboxSettings(const QgsSkyboxSettings &skyboxSettings)
Sets the current configuration of the skybox.
void skyboxSettingsChanged()
Emitted when skybox settings are changed.
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.
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 pointLightsChanged()
Emitted when the list of point lights changes.
void setTerrainElevationOffset(float offset)
Sets the terrain elevation offset (used to move the terrain up or down)
void setCrs(const QgsCoordinateReferenceSystem &crs)
Sets coordinate reference system used in the 3D scene.
void setEyeDomeLightingDistance(int distance)
Sets the eye dome lighting distance value (contributes to the contrast of the image.
void setShowLightSourceOrigins(bool enabled)
Sets whether to show light source origins as a sphere (for debugging)
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.
void setTerrainShadingEnabled(bool enabled)
Sets whether terrain shading is enabled.
void setDebugShadowMapSettings(bool enabled, Qt::Corner corner, double size)
Sets the debugging settings of the shadow map.
void setSelectionColor(const QColor &color)
Sets color used for selected features.
void showLightSourceOriginsChanged()
Emitted when the flag whether light source origins are shown has changed.
QColor backgroundColor() const
Returns background color of the 3D map view.
void resolveReferences(const QgsProject &project)
Resolves references to other objects (map layers) after the call to readXml()
QgsVector3D worldToMapCoordinates(const QgsVector3D &worldCoords) const
Converts 3D world coordinates to map coordinates (applies offset and turns (x,y,z) into (x,...
Qgs3DMapSettings()=default
Constructor for Qgs3DMapSettings.
~Qgs3DMapSettings() override
void showLabelsChanged()
Emitted when the flag whether labels are displayed on terrain tiles has changed.
void maxTerrainScreenErrorChanged()
Emitted when the maximum terrain screen error has changed.
void setShowCameraViewCenter(bool enabled)
Sets whether to show camera's view center as a sphere (for debugging)
int mapTileResolution() const
Returns resolution (in pixels) of the texture of a terrain tile.
void setCameraMovementSpeed(double movementSpeed)
Sets the camera movement speed.
void terrainElevationOffsetChanged(float newElevation)
Emitted when the terrain elevation offset is changed.
void setBackgroundColor(const QColor &color)
Sets background color of the 3D map view.
void fpsCounterEnabledChanged(bool fpsCounterEnabled)
Emitted when the FPS counter is enabled or disabled.
void setProjectionType(const Qt3DRender::QCameraLens::ProjectionType projectionType)
Sets the camera lens' projection type.
void setCameraNavigationMode(QgsCameraController::NavigationMode navigationMode)
Sets the navigation mode for the camera.
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.
void setMaxTerrainScreenError(float error)
Sets maximum allowed screen error of terrain tiles in pixels.
void cameraMovementSpeedChanged()
Emitted when the camera movement speed was changed.
QgsCoordinateReferenceSystem crs() const
Returns coordinate reference system used in the 3D scene.
float maxTerrainScreenError() const
Returns maximum allowed screen error of terrain tiles in pixels.
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.
void setIsFpsCounterEnabled(bool fpsCounterEnabled)
Sets whether FPS counter label is enabled.
QList< QgsPointLightSettings > pointLights() const
Returns list of point lights defined in the scene.
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.
QgsCameraController::NavigationMode cameraNavigationMode() const
Returns the navigation mode used by the camera.
void terrainGeneratorChanged()
Emitted when the terrain generator has changed.
void setTerrainGenerator(QgsTerrainGenerator *gen)
Sets terrain generator.
void debugShadowMapSettingsChanged()
Emitted when shadow map debugging has changed.
QList< QgsMapLayer * > terrainLayers() const
Returns the list of map layers to be rendered as a texture of the terrain.
void showCameraViewCenterChanged()
Emitted when the flag whether camera's view center is shown has changed.
void maxTerrainGroundErrorChanged()
Emitted when the maximum terrain ground error has changed.
void setTerrainLayers(const QList< QgsMapLayer * > &layers)
Sets the list of 2d map layers to be rendered in the terrain.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
static QgsVector3D worldToMapCoordinates(const QgsVector3D &worldCoords, const QgsVector3D &origin)
Converts 3D world coordinates to map coordinates (applies offset and turns (x,y,z) into (x,...
static QgsVector3D mapToWorldCoordinates(const QgsVector3D &mapCoords, const QgsVector3D &origin)
Converts map coordinates to 3D world coordinates (applies offset and turns (x,y,z) into (x,...
Base class for all renderers that may to participate in 3D view.
virtual void readXml(const QDomElement &elem, const QgsReadWriteContext &context)=0
Reads renderer's properties from given XML element.
virtual void resolveReferences(const QgsProject &project)
Resolves references to other objects - second phase of loading - after readXml()
NavigationMode
The navigation mode used by the camera.
@ WalkNavigation
Uses WASD keys or arrows to navigate in walking (first person) manner.
@ TerrainBasedNavigation
The default navigation based on the terrain.
This class represents a coordinate reference system (CRS).
bool readXml(const QDomNode &node)
Restores state from the given DOM node.
bool writeXml(QDomNode &node, QDomDocument &doc) const
Stores state to the given Dom node in the given document.
Contains information about the context in which a coordinate transform is executed.
void setCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets CRS of the terrain.
void readXml(const QDomElement &elem)
Reads configuration from a DOM element previously written using writeXml()
void setCrs(const QgsCoordinateReferenceSystem &crs)
Sets CRS of the terrain.
Base class for all map layer types.
3D renderer that renders all mesh triangles of a mesh layer.
void setCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets CRS of the terrain.
void writeXml(QDomElement &elem, const QgsReadWriteContext &context) const override
Writes settings to a DOM element.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context) override
Reads settings from a DOM element.
3D renderer that renders all points from a point cloud layer
void setPosition(const QgsVector3D &pos)
Sets position of the light (in 3D world coordinates)
void readXml(const QDomElement &elem)
Reads configuration from a DOM element previously written using writeXml()
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Q_INVOKABLE QgsMapLayer * mapLayer(const QString &layerId) const
Retrieve a pointer to a registered layer by layer ID.
The class is used as a container of context for various read/write operations on other objects.
class containing the configuration of shadows rendering 3
void writeXml(QDomElement &element, const QgsReadWriteContext &context) const
Writes settings to a DOM element.
void readXml(const QDomElement &element, const QgsReadWriteContext &context)
Reads settings from a DOM element.
Contains the configuration of a skybox entity.
void readXml(const QDomElement &element, const QgsReadWriteContext &context)
Reads settings from a DOM element.
void writeXml(QDomElement &element, const QgsReadWriteContext &context) const
Writes settings to a DOM element.
static QColor decodeColor(const QString &str)
static QString encodeColor(const QColor &color)
Base class for objects with an associated (optional) temporal range.
const QgsDateTimeRange & temporalRange() const
Returns the datetime range for the object.
void setTemporalRange(const QgsDateTimeRange &range)
Sets the temporal range for the object.
void extentChanged()
Emitted when the terrain extent has changed.
static QString typeToString(Type type)
Converts terrain generator type enumeration into a string.
double y() const
Returns Y coordinate.
double z() const
Returns Z coordinate.
double x() const
Returns X coordinate.
3D renderer that renders all features of a vector layer with the same 3D symbol.
_LayerRef< QgsMapLayer > QgsMapLayerRef
const QgsCoordinateReferenceSystem & crs
void setLayer(TYPE *l)
Sets the reference to point to a specified layer.
QString layerId
Original layer ID.