QGIS API Documentation 3.41.0-Master (af5edcb665c)
Loading...
Searching...
No Matches
qgsquantizedmeshtiles.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsquantizedmeshtiles.h
3 ----------------------------
4 begin : May 2024
5 copyright : (C) 2024 by David Koňařík
6 email : dvdkon at konarici dot cz
7
8 ***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16
17#ifndef QGSQUANTIZEDMESHTILED_H
18#define QGSQUANTIZEDMESHTILED_H
19
20#include "qgis_core.h"
21#include "qgsexception.h"
22#include "qgsmeshdataprovider.h"
23#include "qgsrectangle.h"
24#include <qbytearray.h>
25
26#define TINYGLTF_NO_STB_IMAGE // we use QImage-based reading of images
27#define TINYGLTF_NO_STB_IMAGE_WRITE // we don't need writing of images
28#include "tiny_gltf.h"
29
30#define SIP_NO_FILE
31
32// Definition copied from format spec: https://github.com/CesiumGS/quantized-mesh
33#pragma pack (push, 1)
35{
36 // The center of the tile in Earth-centered Fixed coordinates.
37 double CenterX;
38 double CenterY;
39 double CenterZ;
40
41 // The minimum and maximum heights in the area covered by this tile.
42 // The minimum may be lower and the maximum may be higher than
43 // the height of any vertex in this tile in the case that the min/max vertex
44 // was removed during mesh simplification, but these are the appropriate
45 // values to use for analysis or visualization.
48
49 // The tile’s bounding sphere. The X,Y,Z coordinates are again expressed
50 // in Earth-centered Fixed coordinates, and the radius is in meters.
55
56 // The horizon occlusion point, expressed in the ellipsoid-scaled Earth-centered Fixed frame.
57 // If this point is below the horizon, the entire tile is below the horizon.
58 // See http://cesiumjs.org/2013/04/25/Horizon-culling/ for more information.
62
63 uint32_t vertexCount;
64};
65#pragma pack (pop)
66
73{
74 public:
76};
77
78struct CORE_EXPORT QgsQuantizedMeshTile
79{
81 std::vector<uint16_t> mVertexCoords;
82 std::vector<float> mNormalCoords;
83 std::vector<uint32_t> mTriangleIndices;
84 std::vector<uint32_t> mWestVertices;
85 std::vector<uint32_t> mSouthVertices;
86 std::vector<uint32_t> mEastVertices;
87 std::vector<uint32_t> mNorthVertices;
88 std::map<uint8_t, std::vector<char>> mExtensions;
89
90 QgsQuantizedMeshTile( const QByteArray &data );
91 // For some reason, commonly available QM tiles often have a very high (as
92 // much as 50%) percentage of degenerate triangles. They don't harm our
93 // rendering, but removing them could improve performance and makes working
94 // with the data easier.
95 void removeDegenerateTriangles();
96 void generateNormals();
97 tinygltf::Model toGltf( bool addSkirt = false, double skirtDepth = 0, bool withTextureCoords = false );
98 // Make sure to call removeDegenerateTriangles() beforehand!
99 QgsMesh toMesh( QgsRectangle tileBounds );
100};
101
102#endif // QGSQUANTIZEDMESHTILED_H
Defines a QGIS exception class.
QgsException(const QString &message)
Constructor for QgsException, with the specified error message.
Exception thrown on failure to parse Quantized Mesh tile (malformed data)
A rectangle specified with double values.
Mesh - vertices, edges and faces.
std::vector< float > mNormalCoords
std::vector< uint32_t > mTriangleIndices
std::vector< uint32_t > mNorthVertices
std::vector< uint32_t > mWestVertices
QgsQuantizedMeshHeader mHeader
std::vector< uint32_t > mEastVertices
std::map< uint8_t, std::vector< char > > mExtensions
std::vector< uint16_t > mVertexCoords
std::vector< uint32_t > mSouthVertices