QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgstiledscenelayerrenderer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgstiledscenelayerrenderer.h
3 --------------------
4 begin : June 2023
5 copyright : (C) 2023 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSTILEDSCENELAYERRENDERER_H
19#define QGSTILEDSCENELAYERRENDERER_H
20
21#include <memory>
22
23#include "qgis_core.h"
25#include "qgsmaplayerrenderer.h"
27#include "qgstiledsceneindex.h"
28
29#include <QElapsedTimer>
30#include <QHash>
31#include <QImage>
32#include <QSet>
33
34#define SIP_NO_FILE
35
37class QgsFeedback;
41
42namespace tinygltf
43{
44 struct Image;
45 class Model;
46 class Node;
47 class TinyGLTF;
48 struct Primitive;
49}
50
62{
63 public:
64
68
69 bool render() override;
70 Qgis::MapLayerRendererFlags flags() const override;
71 bool forceRasterRender() const override;
72 QgsFeedback *feedback() const override { return mFeedback.get(); }
73
74 private:
75
76 QgsTiledSceneRequest createBaseRequest();
77
78 bool renderTiles( QgsTiledSceneRenderContext &context );
79
80 void renderTile( const QgsTiledSceneTile &tile, QgsTiledSceneRenderContext &context );
81
87 bool renderTileContent( const QgsTiledSceneTile &tile, QgsTiledSceneRenderContext &context );
88
89 void renderPrimitive( const tinygltf::Model &model,
90 const tinygltf::Primitive &primitive,
91 const QgsTiledSceneTile &tile,
92 const QgsVector3D &tileTranslationEcef,
93 const QMatrix4x4 *gltfLocalTransform,
94 const QString &contentUri,
96
97 void renderTrianglePrimitive( const tinygltf::Model &model,
98 const tinygltf::Primitive &primitive,
99 const QgsTiledSceneTile &tile,
100 const QgsVector3D &tileTranslationEcef,
101 const QMatrix4x4 *gltfLocalTransform,
102 const QString &contentUri,
104
105 void renderLinePrimitive( const tinygltf::Model &model,
106 const tinygltf::Primitive &primitive,
107 const QgsTiledSceneTile &tile,
108 const QgsVector3D &tileTranslationEcef,
109 const QMatrix4x4 *gltfLocalTransform,
110 const QString &contentUri,
112
113 QString mLayerName;
114
115 std::unique_ptr< QgsTiledSceneRenderer > mRenderer;
116 bool mRenderTileBorders = false;
117
118 QList< QgsMapClippingRegion > mClippingRegions;
119
122 QgsTiledSceneBoundingVolume mLayerBoundingVolume;
123 QgsTiledSceneIndex mIndex;
124
125 QgsCoordinateTransform mSceneToMapTransform;
126
127 enum class PrimitiveType
128 {
129 Line,
130 Triangle
131 };
132
133 struct PrimitiveData
134 {
135 PrimitiveType type;
136 QPolygonF coordinates;
137 float z;
138 QPair< int, int > textureId { -1, -1 };
139 float textureCoords[6];
140 };
141
142 QVector< PrimitiveData > mPrimitiveData;
143
144 int mCurrentModelId = 0;
145 QHash< QPair< int, int >, QImage > mTextures;
146
147 struct TileDetails
148 {
149 QPolygonF boundary;
150 bool hasContent = false;
151 QString id;
152 };
153 QVector< TileDetails > mTileDetails;
154
155 std::unique_ptr<QgsFeedback> mFeedback;
156 QSet< int > mWarnedPrimitiveTypes;
157
158 QElapsedTimer mElapsedTimer;
159
160 bool mEnableProfile = false;
161 quint64 mPreparationTime = 0;
162};
163
164#endif // QGSTILEDSCENELAYERRENDERER_H
QFlags< MapLayerRendererFlag > MapLayerRendererFlags
Flags which control how map layer renderers behave.
Definition qgis.h:2796
Represents a coordinate reference system (CRS).
Handles coordinate transforms between two coordinate systems.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:44
A map clipping region (in map coordinates and CRS).
virtual bool render()=0
Do the rendering (based on data stored in the class).
virtual bool forceRasterRender() const
Returns true if the renderer must be rendered to a raster paint device (e.g.
virtual Qgis::MapLayerRendererFlags flags() const
Returns flags which control how the map layer rendering behaves.
QgsMapLayerRenderer(const QString &layerID, QgsRenderContext *context=nullptr)
Constructor for QgsMapLayerRenderer, with the associated layerID and render context.
Contains information about the context of a rendering operation.
Represents a bounding volume for a tiled scene.
An index for tiled scene data providers.
QgsTiledSceneLayerRenderer(QgsTiledSceneLayer *layer, QgsRenderContext &context)
Ctor.
QgsFeedback * feedback() const override
Access to feedback object of the layer renderer (may be nullptr).
~QgsTiledSceneLayerRenderer() override
Represents a map layer supporting display of tiled scene objects.
Encapsulates the render context for a 2D tiled scene rendering operation.
Abstract base class for 2d tiled scene renderers.
Tiled scene data request.
Represents an individual tile from a tiled scene data source.
A 3D vector (similar to QVector3D) with the difference that it uses double precision instead of singl...
Definition qgsvector3d.h:30