QGIS API Documentation  3.23.0-Master (eb871beae0)
qgs3dmapscene.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgs3dmapscene.h
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 #ifndef QGS3DMAPSCENE_H
17 #define QGS3DMAPSCENE_H
18 
19 #include "qgis_3d.h"
20 
21 #include <Qt3DCore/QEntity>
22 
23 #include "qgsfeatureid.h"
25 #include "qgsray3d.h"
26 #include "qgscameracontroller.h"
27 
28 namespace Qt3DRender
29 {
30  class QRenderSettings;
31  class QCamera;
32  class QPickEvent;
33  class QObjectPicker;
34 }
35 
36 namespace Qt3DLogic
37 {
38  class QFrameAction;
39 }
40 
41 namespace Qt3DExtras
42 {
43  class QForwardRenderer;
44  class QSkyboxEntity;
45 }
46 
49 class QgsMapLayer;
51 class Qgs3DMapSettings;
52 class QgsTerrainEntity;
53 class QgsChunkedEntity;
54 class QgsSkyboxEntity;
55 class QgsSkyboxSettings;
59 class QgsChunkNode;
60 
61 #define SIP_NO_FILE
62 
69 class _3D_EXPORT Qgs3DMapScene : public Qt3DCore::QEntity
70 {
71  Q_OBJECT
72  public:
74  Qgs3DMapScene( const Qgs3DMapSettings &map, QgsAbstract3DEngine *engine );
75 
77  QgsCameraController *cameraController() { return mCameraController; }
79  QgsTerrainEntity *terrainEntity() { return mTerrain; }
80 
82  void viewZoomFull();
83 
85  int terrainPendingJobsCount() const;
86 
91  int totalPendingJobsCount() const;
92 
95  {
98  };
99 
101  SceneState sceneState() const { return mSceneState; }
102 
104  void registerPickHandler( Qgs3DMapScenePickHandler *pickHandler );
106  void unregisterPickHandler( Qgs3DMapScenePickHandler *pickHandler );
107 
112  float worldSpaceError( float epsilon, float distance );
113 
115  void exportScene( const Qgs3DMapExportSettings &exportSettings );
116 
122  QVector<const QgsChunkNode *> getLayerActiveChunkNodes( QgsMapLayer *layer ) SIP_SKIP;
123 
129  QgsRectangle sceneExtent();
130  signals:
135 
143 
145  void fpsCountChanged( float fpsCount );
147  void fpsCounterEnabledChanged( bool fpsCounterEnabled );
148 
149  public slots:
151  void updateTemporal();
152 
153  private slots:
154  void onCameraChanged();
155  void onFrameTriggered( float dt );
156  void createTerrain();
157  void onLayerRenderer3DChanged();
158  void onLayersChanged();
159  void createTerrainDeferred();
160  void onBackgroundColorChanged();
161  void onLayerEntityPickedObject( Qt3DRender::QPickEvent *pickEvent, QgsFeatureId fid );
162  void updateLights();
163  void updateCameraLens();
164  void onRenderersChanged();
165  void onSkyboxSettingsChanged();
166  void onShadowSettingsChanged();
167  void onEyeDomeShadingSettingsChanged();
168  void onDebugShadowMapSettingsChanged();
169  void onDebugDepthMapSettingsChanged();
170  void onCameraMovementSpeedChanged();
171 
172  bool updateCameraNearFarPlanes();
173 
174  private:
175  void addLayerEntity( QgsMapLayer *layer );
176  void removeLayerEntity( QgsMapLayer *layer );
177  void addCameraViewCenterEntity( Qt3DRender::QCamera *camera );
178  void setSceneState( SceneState state );
179  void updateSceneState();
180  void updateScene();
181  void finalizeNewEntity( Qt3DCore::QEntity *newEntity );
182  int maximumTextureSize() const;
183 
184  private:
185  const Qgs3DMapSettings &mMap;
186  QgsAbstract3DEngine *mEngine = nullptr;
188  Qt3DLogic::QFrameAction *mFrameAction = nullptr;
189  QgsCameraController *mCameraController = nullptr;
190  QgsTerrainEntity *mTerrain = nullptr;
191  QList<QgsChunkedEntity *> mChunkEntities;
193  Qt3DCore::QEntity *mEntityCameraViewCenter = nullptr;
195  QMap<QgsMapLayer *, Qt3DCore::QEntity *> mLayerEntities;
196  QMap<const QgsAbstract3DRenderer *, Qt3DCore::QEntity *> mRenderersEntities;
197  bool mTerrainUpdateScheduled = false;
198  SceneState mSceneState = Ready;
200  QList<Qgs3DMapScenePickHandler *> mPickHandlers;
202  QList<Qt3DCore::QEntity *> mLightEntities;
204  QList<Qt3DCore::QEntity *> mLightOriginEntities;
205  QList<QgsMapLayer *> mModelVectorLayers;
206  QgsSkyboxEntity *mSkybox = nullptr;
207 };
208 
209 #endif // QGS3DMAPSCENE_H
Manages the various settings the user can choose from when exporting a 3D scene 3.
void terrainPendingJobsCountChanged()
Emitted when the number of terrain's pending jobs changes.
void fpsCountChanged(float fpsCount)
Emitted when the FPS count changes.
SceneState
Enumeration of possible states of the 3D scene.
Definition: qgs3dmapscene.h:95
@ Ready
The scene is fully loaded/updated.
Definition: qgs3dmapscene.h:96
@ Updating
The scene is still being loaded/updated.
Definition: qgs3dmapscene.h:97
void totalPendingJobsCountChanged()
Emitted when the total number of pending jobs changes.
void fpsCounterEnabledChanged(bool fpsCounterEnabled)
Emitted when the FPS counter is activated or deactivated.
QgsCameraController * cameraController()
Returns camera controller.
Definition: qgs3dmapscene.h:77
void sceneStateChanged()
Emitted when the scene's state has changed.
SceneState sceneState() const
Returns the current state of the scene.
void terrainEntityChanged()
Emitted when the current terrain entity is replaced by a new one.
QgsTerrainEntity * terrainEntity()
Returns terrain entity (may be temporarily nullptr)
Definition: qgs3dmapscene.h:79
Base class for all renderers that may to participate in 3D view.
Base class for all map layer types.
Definition: qgsmaplayer.h:73
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Base class for all skybox types.
Contains the configuration of a skybox entity.
#define SIP_SKIP
Definition: qgis_sip.h:126
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Definition: qgsfeatureid.h:28