QGIS API Documentation  3.17.0-Master (a035f434f4)
qgs3dsceneexporter.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgs3dsceneexporter.h
3  --------------------------------------
4  Date : June 2020
5  Copyright : (C) 2020 by Belgacem Nedjima
6  Email : gb underscore nedjima at esi dot dz
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 QGS3DSCENEEXPORTER_H
17 #define QGS3DSCENEEXPORTER_H
18 
19 #include <Qt3DCore/QEntity>
20 #include <Qt3DRender/QAttribute>
21 #include <Qt3DExtras/QPlaneGeometry>
22 #include <Qt3DRender/QSceneLoader>
23 #include <Qt3DRender/QMesh>
24 #include <QMap>
25 #include <QFile>
26 #include <QVector3D>
27 
28 #include "qgs3dexportobject.h"
29 
31 class QgsTerrainTileEntity;
32 class QgsTerrainEntity;
33 class Qgs3DMapSettings;
36 class QgsChunkNode;
37 class Qgs3DExportObject;
38 class QgsTerrainTextureGenerator;
39 class QgsVectorLayer;
40 class QgsPolygon3DSymbol;
41 class QgsLine3DSymbol;
42 class QgsPoint3DSymbol;
43 class QgsMeshEntity;
44 
45 #define SIP_NO_FILE
46 
56 class _3D_EXPORT Qgs3DSceneExporter : public Qt3DCore::QEntity
57 {
58  public:
63  {
64  for ( Qgs3DExportObject *obj : mObjects )
65  delete obj;
66  }
67 
72  bool parseVectorLayerEntity( Qt3DCore::QEntity *entity, QgsVectorLayer *layer );
73 
75  void parseTerrain( QgsTerrainEntity *terrain, const QString &layer );
76 
78  void save( const QString &sceneName, const QString &sceneFolderPath );
79 
81  void setSmoothEdges( bool smoothEdges ) { mSmoothEdges = smoothEdges; }
83  bool smoothEdges() const { return mSmoothEdges; }
84 
86  void setExportNormals( bool exportNormals ) { mExportNormals = exportNormals; }
88  bool exportNormals() const { return mExportNormals; }
89 
91  void setExportTextures( bool exportTextures ) { mExportTextures = exportTextures; }
93  bool exportTextures() const { return mExportTextures; }
94 
96  void setTerrainResolution( int resolution ) { mTerrainResolution = resolution; }
98  int terrainResolution() const { return mTerrainResolution; }
99 
101  void setTerrainTextureResolution( int resolution ) { mTerrainTextureResolution = resolution; }
103  int terrainTextureResolution() const { return mTerrainTextureResolution; }
105  void setScale( float scale ) { mScale = scale; }
107  float scale() const { return mScale; }
108 
109  private:
111  QVector<Qgs3DExportObject *> processInstancedPointGeometry( Qt3DCore::QEntity *entity, const QString &objectNamePrefix );
113  QVector<Qgs3DExportObject *> processSceneLoaderGeometries( Qt3DRender::QSceneLoader *sceneLoader, const QString &objectNamePrefix );
115  Qgs3DExportObject *processGeometryRenderer( Qt3DRender::QGeometryRenderer *mesh, const QString &objectNamePrefix, float sceneScale = 1.0f, QVector3D sceneTranslation = QVector3D( 0.0f, 0.0f, 0.0f ) );
117  void processEntityMaterial( Qt3DCore::QEntity *entity, Qgs3DExportObject *object );
119  QVector<Qgs3DExportObject *> processLines( Qt3DCore::QEntity *entity, const QString &objectNamePrefix );
121  Qgs3DExportObject *processPoints( Qt3DCore::QEntity *entity, const QString &objectNamePrefix );
122 
124  QgsTerrainTileEntity *getFlatTerrainEntity( QgsTerrainEntity *terrain, QgsChunkNode *node );
126  QgsTerrainTileEntity *getDemTerrainEntity( QgsTerrainEntity *terrain, QgsChunkNode *node );
128  QgsTerrainTileEntity *getMeshTerrainEntity( QgsTerrainEntity *terrain, QgsChunkNode *node );
129 
131  void parseDemTile( QgsTerrainTileEntity *tileEntity, const QString &layerName );
133  void parseFlatTile( QgsTerrainTileEntity *tileEntity, const QString &layerName );
135  void parseMeshTile( QgsTerrainTileEntity *meshEntity, const QString &layerName );
136 
137  QString getObjectName( const QString &name );
138  private:
139  QMap<QString, int> usedObjectNamesCounter;
140  QVector<Qgs3DExportObject *> mObjects;
141 
142  bool mSmoothEdges = false;
143  int mTerrainResolution = 128;
144  bool mExportNormals = true;
145  bool mExportTextures = false;
146  int mTerrainTextureResolution = 512;
147  float mScale = 1.0f;
148 
149  friend QgsPolygon3DSymbol;
150  friend QgsLine3DSymbol;
151  friend QgsPoint3DSymbol;
152 };
153 
154 #endif // QGS3DSCENEEXPORTER_H
3 Terrain generator that creates a simple square flat area.
~Qgs3DSceneExporter()
Destructor.
bool smoothEdges() const
Returns whether the triangles will look smooth.
int terrainResolution() const
Returns the terrain resolution.
3 3D symbol that draws polygon geometries as planar polygons, optionally extruded (with added walls)...
The Qgs3DSceneExporter class Entity that handles the exporting of 3D scene.
3 Definition of the world
void setTerrainTextureResolution(int resolution)
Sets the terrain texture resolution.
bool exportTextures() const
Returns whether the textures will be exported.
float scale() const
Returns the scale of the exported 3D model.
void setTerrainResolution(int resolution)
Sets the terrain resolution.
3 3D symbol that draws point geometries as 3D objects using one of the predefined shapes...
3 Class derived from Qt3DRender::QGeometry that represents polygons tessellated into 3D geometry...
void setExportTextures(bool exportTextures)
Sets whether the textures will be exported.
3 3D symbol that draws linestring geometries as planar polygons (created from lines using a buffer wi...
void setSmoothEdges(bool smoothEdges)
Sets whether the triangles will look smooth.
int terrainTextureResolution() const
Returns the terrain resolution.
void setScale(float scale)
Sets the scale of the exported 3D model.
Qgs3DSceneExporter()
Constructor.
The Qgs3DExportObject class Manages the data of each object of the scene (positions, normals, texture coordinates ...) since each object.
3 Implementation of terrain generator that uses a raster layer with DEM to build terrain.
void setExportNormals(bool exportNormals)
Sets whether the normals will be exported.
Represents a vector layer which manages a vector based data sets.
bool exportNormals() const
Returns whether the normals will be exported.