QGIS API Documentation  3.20.0-Odense (decaadbb31)
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 
124  signals:
129 
137 
139  void fpsCountChanged( float fpsCount );
141  void fpsCounterEnabledChanged( bool fpsCounterEnabled );
142 
143  public slots:
145  void updateTemporal();
146 
147  private slots:
148  void onCameraChanged();
149  void onFrameTriggered( float dt );
150  void createTerrain();
151  void onLayerRenderer3DChanged();
152  void onLayersChanged();
153  void createTerrainDeferred();
154  void onBackgroundColorChanged();
155  void onLayerEntityPickedObject( Qt3DRender::QPickEvent *pickEvent, QgsFeatureId fid );
156  void updateLights();
157  void updateCameraLens();
158  void onRenderersChanged();
159  void onSkyboxSettingsChanged();
160  void onShadowSettingsChanged();
161  void onEyeDomeShadingSettingsChanged();
162  void onDebugShadowMapSettingsChanged();
163  void onDebugDepthMapSettingsChanged();
164  void onCameraMovementSpeedChanged();
165 
166  private:
167  void addLayerEntity( QgsMapLayer *layer );
168  void removeLayerEntity( QgsMapLayer *layer );
169  void addCameraViewCenterEntity( Qt3DRender::QCamera *camera );
170  void setSceneState( SceneState state );
171  void updateSceneState();
172  void updateScene();
173  bool updateCameraNearFarPlanes();
174  void finalizeNewEntity( Qt3DCore::QEntity *newEntity );
175  int maximumTextureSize() const;
176 
177  private:
178  const Qgs3DMapSettings &mMap;
179  QgsAbstract3DEngine *mEngine = nullptr;
181  Qt3DLogic::QFrameAction *mFrameAction = nullptr;
182  QgsCameraController *mCameraController = nullptr;
183  QgsTerrainEntity *mTerrain = nullptr;
184  QList<QgsChunkedEntity *> mChunkEntities;
186  Qt3DCore::QEntity *mEntityCameraViewCenter = nullptr;
188  QMap<QgsMapLayer *, Qt3DCore::QEntity *> mLayerEntities;
189  QMap<const QgsAbstract3DRenderer *, Qt3DCore::QEntity *> mRenderersEntities;
190  bool mTerrainUpdateScheduled = false;
191  SceneState mSceneState = Ready;
193  QList<Qgs3DMapScenePickHandler *> mPickHandlers;
195  QList<Qt3DCore::QEntity *> mLightEntities;
197  QList<Qt3DCore::QEntity *> mLightOriginEntities;
198  QList<QgsMapLayer *> mModelVectorLayers;
199  QgsSkyboxEntity *mSkybox = nullptr;
200 };
201 
202 #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:70
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