QGIS API Documentation 3.41.0-Master (3440c17df1d)
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#pragma once
18
19#include "qgis_core.h"
20#include "qgsexception.h"
21#include "qgsmeshdataprovider.h"
22#include "qgsrectangle.h"
23#include <qbytearray.h>
24
25#define TINYGLTF_NO_STB_IMAGE // we use QImage-based reading of images
26#define TINYGLTF_NO_STB_IMAGE_WRITE // we don't need writing of images
27#include "tiny_gltf.h"
28
29#define SIP_NO_FILE
30
31// Definition copied from format spec: https://github.com/CesiumGS/quantized-mesh
32#pragma pack (push, 1)
34{
35 // The center of the tile in Earth-centered Fixed coordinates.
36 double CenterX;
37 double CenterY;
38 double CenterZ;
39
40 // The minimum and maximum heights in the area covered by this tile.
41 // The minimum may be lower and the maximum may be higher than
42 // the height of any vertex in this tile in the case that the min/max vertex
43 // was removed during mesh simplification, but these are the appropriate
44 // values to use for analysis or visualization.
47
48 // The tile’s bounding sphere. The X,Y,Z coordinates are again expressed
49 // in Earth-centered Fixed coordinates, and the radius is in meters.
54
55 // The horizon occlusion point, expressed in the ellipsoid-scaled Earth-centered Fixed frame.
56 // If this point is below the horizon, the entire tile is below the horizon.
57 // See http://cesiumjs.org/2013/04/25/Horizon-culling/ for more information.
61
62 uint32_t vertexCount;
63};
64#pragma pack (pop)
65
72{
73 public:
75};
76
77struct CORE_EXPORT QgsQuantizedMeshTile
78{
80 std::vector<uint16_t> mVertexCoords;
81 std::vector<float> mNormalCoords;
82 std::vector<uint32_t> mTriangleIndices;
83 std::vector<uint32_t> mWestVertices;
84 std::vector<uint32_t> mSouthVertices;
85 std::vector<uint32_t> mEastVertices;
86 std::vector<uint32_t> mNorthVertices;
87 std::map<uint8_t, std::vector<char>> mExtensions;
88
89 QgsQuantizedMeshTile( const QByteArray &data );
90 // For some reason, commonly available QM tiles often have a very high (as
91 // much as 50%) percentage of degenerate triangles. They don't harm our
92 // rendering, but removing them could improve performance and makes working
93 // with the data easier.
94 void removeDegenerateTriangles();
95 void generateNormals();
96 tinygltf::Model toGltf( bool addSkirt = false, double skirtDepth = 0, bool withTextureCoords = false );
97 // Make sure to call removeDegenerateTriangles() beforehand!
98 QgsMesh toMesh( QgsRectangle tileBounds );
99};
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