QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
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} //namespace tinygltf
50
62{
63 public:
67
68 bool render() override;
69 Qgis::MapLayerRendererFlags flags() const override;
70 bool forceRasterRender() const override;
71 QgsFeedback *feedback() const override { return mFeedback.get(); }
72
73 private:
74 QgsTiledSceneRequest createBaseRequest();
75
76 bool renderTiles( QgsTiledSceneRenderContext &context );
77
78 void renderTile( const QgsTiledSceneTile &tile, QgsTiledSceneRenderContext &context );
79
85 bool renderTileContent( const QgsTiledSceneTile &tile, QgsTiledSceneRenderContext &context );
86
87 void renderPrimitive(
88 const tinygltf::Model &model,
89 const tinygltf::Primitive &primitive,
90 const QgsTiledSceneTile &tile,
91 const QgsVector3D &tileTranslationEcef,
92 const QMatrix4x4 *gltfLocalTransform,
93 const QString &contentUri,
95 );
96
97 void renderTrianglePrimitive(
98 const tinygltf::Model &model,
99 const tinygltf::Primitive &primitive,
100 const QgsTiledSceneTile &tile,
101 const QgsVector3D &tileTranslationEcef,
102 const QMatrix4x4 *gltfLocalTransform,
103 const QString &contentUri,
105 );
106
107 void renderLinePrimitive(
108 const tinygltf::Model &model,
109 const tinygltf::Primitive &primitive,
110 const QgsTiledSceneTile &tile,
111 const QgsVector3D &tileTranslationEcef,
112 const QMatrix4x4 *gltfLocalTransform,
113 const QString &contentUri,
115 );
116
117 QString mLayerName;
118
119 std::unique_ptr< QgsTiledSceneRenderer > mRenderer;
120 bool mRenderTileBorders = false;
121
122 QList< QgsMapClippingRegion > mClippingRegions;
123
126 QgsTiledSceneBoundingVolume mLayerBoundingVolume;
127 QgsTiledSceneIndex mIndex;
128
129 QgsCoordinateTransform mSceneToMapTransform;
130
131 enum class PrimitiveType
132 {
133 Line,
134 Triangle
135 };
136
137 struct PrimitiveData
138 {
139 PrimitiveType type;
140 QPolygonF coordinates;
141 float z;
142 QPair< int, int > textureId { -1, -1 };
143 float textureCoords[6];
144 };
145
146 QVector< PrimitiveData > mPrimitiveData;
147
148 int mCurrentModelId = 0;
149 QHash< QPair< int, int >, QImage > mTextures;
150
151 struct TileDetails
152 {
153 QPolygonF boundary;
154 bool hasContent = false;
155 QString id;
156 };
157 QVector< TileDetails > mTileDetails;
158
159 std::unique_ptr<QgsFeedback> mFeedback;
160 QSet< int > mWarnedPrimitiveTypes;
161
162 QElapsedTimer mElapsedTimer;
163
164 bool mEnableProfile = false;
165 quint64 mPreparationTime = 0;
166};
167
168#endif // QGSTILEDSCENELAYERRENDERER_H
QFlags< MapLayerRendererFlag > MapLayerRendererFlags
Flags which control how map layer renderers behave.
Definition qgis.h:2893
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:33