16#ifndef QGS3DMAPSCENE_H
17#define QGS3DMAPSCENE_H
26#include <Qt3DCore/QEntity>
31 class QRenderSettings;
42 class QForwardRenderer;
53class QgsTerrainEntity;
55class QgsChunkedEntity;
61class Qgs3DMapSceneEntity;
136 double worldSpaceError(
double epsilon,
double distance )
const;
178 QgsDoubleRange elevationRange(
bool ignoreTerrain =
false )
const;
253 Q_DECL_DEPRECATED
static QMap<QString, Qgs3DMapScene *> openScenes()
SIP_DEPRECATED;
275 void enableClipping( const QList<QVector4D> &clipPlaneEquations );
283 void disableClipping();
291 void addSceneEntity( Qgs3DMapSceneEntity *entity )
SIP_SKIP;
298 void removeSceneEntity( Qgs3DMapSceneEntity *entity )
SIP_SKIP;
310 static std::function<QMap<QString, Qgs3DMapScene *>()> sOpenScenesFunction;
349 void onCameraChanged();
350 void onFrameTriggered(
float dt );
351 void createTerrain();
352 void onLayerRenderer3DChanged();
353 void onLayersChanged();
354 void createTerrainDeferred();
355 void onBackgroundColorChanged();
357 void updateCameraLens();
358 void onSkyboxSettingsChanged();
359 void onShadowSettingsChanged();
360 void onAmbientOcclusionSettingsChanged();
361 void onEyeDomeShadingSettingsChanged();
362 void onDebugShadowMapSettingsChanged();
363 void onDebugDepthMapSettingsChanged();
364 void onCameraMovementSpeedChanged();
365 void onCameraNavigationModeChanged();
366 void onDebugOverlayEnabledChanged();
367 void onStopUpdatesChanged();
368 void on3DAxisSettingsChanged();
369 void onShowMapOverlayChanged();
371 void onOriginChanged();
373 bool updateCameraNearFarPlanes();
375 void applyPendingOverlayUpdate();
385 void addCameraViewCenterEntity( Qt3DRender::QCamera *camera );
388 void updateSceneState();
390 bool updateScene(
bool forceUpdate =
false );
391 void finalizeNewEntity( Qt3DCore::QEntity *newEntity );
392 int maximumTextureSize()
const;
394 void handleClippingOnEntity( QEntity *entity )
const;
395 void handleClippingOnAllEntities()
const;
397 void schedule2DMapOverlayUpdate();
398 void update2DMapOverlay(
const QVector<QgsPointXY> &extent2DAsPoints );
404 Qt3DLogic::QFrameAction *mFrameAction =
nullptr;
406 QgsTerrainEntity *mTerrain =
nullptr;
407 QgsGlobeEntity *mGlobe =
nullptr;
408 QList<Qgs3DMapSceneEntity *> mSceneEntities;
410 Qt3DCore::QEntity *mEntityCameraViewCenter =
nullptr;
412 QMap<QgsMapLayer *, Qt3DCore::QEntity *> mLayerEntities;
413 bool mTerrainUpdateScheduled =
false;
416 QList<Qt3DCore::QEntity *> mLightEntities;
417 QList<QgsMapLayer *> mModelVectorLayers;
420 Qt3DCore::QEntity *mEntityRotationCenter =
nullptr;
425 bool mSceneUpdatesEnabled =
true;
426 bool mSceneOriginShiftEnabled =
true;
428 QList<QVector4D> mClipPlanesEquations;
429 int mMaxClipPlanes = 6;
433 QTimer *mOverlayUpdateTimer =
nullptr;
Keeps a pointer to a QObject and deletes it whenever this object is deleted.
Display 3D ortho axis in the main 3D view.
Manages the various settings the user can choose from when exporting a 3D scene.
Qgs3DAxis * get3DAxis() const
Returns the 3D axis object.
void viewed2DExtentFrom3DChanged(QVector< QgsPointXY > extent)
Emitted when the viewed 2D extent seen by the 3D camera has changed.
QList< QVector4D > clipPlaneEquations() const
Returns list of clipping planes if clipping is enabled, otherwise an empty list.
void fpsCountChanged(float fpsCount)
Emitted when the FPS count changes.
QgsGlobeEntity * globeEntity()
Returns globe entity (may be nullptr if not using globe scene, terrain rendering is disabled or when ...
friend class TestQgs3DRendering
void setViewFrom2DExtent(const QgsRectangle &extent)
Resets camera view to show the extent extent (top view).
Qgs3DMapScene(Qgs3DMapSettings &map, QgsAbstract3DEngine *engine)
Constructs a 3D scene based on map settings and Qt 3D renderer configuration.
Qgs3DMapSettings * mapSettings() const
Returns the 3D map settings.
QgsAbstract3DEngine * engine() const
Returns the abstract 3D engine.
void gpuMemoryLimitReached()
Emitted when one of the entities reaches its GPU memory limit and it is not possible to lower the GPU...
QgsCameraController * cameraController() const
Returns camera controller.
SceneState
Enumeration of possible states of the 3D scene.
@ Ready
The scene is fully loaded/updated.
@ Updating
The scene is still being loaded/updated.
int totalPendingJobsCount() const
Returns number of pending jobs for all chunked entities.
QgsTerrainEntity * terrainEntity()
Returns terrain entity (may be nullptr if using globe scene, terrain rendering is disabled or when te...
bool hasSceneOriginShiftEnabled() const
Returns whether the 3D scene is allowed to automatically move the scene's origin.
bool hasSceneUpdatesEnabled() const
Returns whether updates of the 3D scene's entities are allowed.
void updateTemporal()
Updates the temporale entities.
void totalPendingJobsCountChanged()
Emitted when the total number of pending jobs changes.
Qt3DCore::QEntity * layerEntity(QgsMapLayer *layer) const
Returns the entity belonging to layer.
void fpsCounterEnabledChanged(bool fpsCounterEnabled)
Emitted when the FPS counter is activated or deactivated.
void sceneStateChanged()
Emitted when the scene's state has changed.
SceneState sceneState() const
Returns the current state of the scene.
QList< QgsMapLayer * > layers() const
Returns the layers that contain chunked entities.
QVector< QgsPointXY > viewFrustum2DExtent() const
Calculates the 2D extent viewed by the 3D camera as the vertices of the viewed trapezoid.
void terrainEntityChanged()
Emitted when the current terrain entity is replaced by a new one.
void setSceneUpdatesEnabled(bool enabled)
Sets whether updates of the 3D scene's entities are allowed.
void setSceneOriginShiftEnabled(bool enabled)
Returns whether the 3D scene is allowed to automatically move the scene's origin.
void viewZoomFull()
Resets camera view to show the whole scene (top view).
Base class for 3D engine implementation.
Base class for all renderers that participate in 3D views.
Object that controls camera movement based on user input.
QgsRange which stores a range of double values.
Base class for all map layer types.
A rectangle specified with double values.
Base class for all skybox types.
Contains the configuration of a skybox entity.