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