QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
qgstiledscenerenderer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgstiledscenerenderer.h
3 --------------------
4 begin : August 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 QGSTILEDSCENERENDERER_H
19#define QGSTILEDSCENERENDERER_H
20
21#include "qgis_core.h"
22#include "qgis_sip.h"
23#include "qgsrendercontext.h"
24
25#include <QString>
26
27using namespace Qt::StringLiterals;
28
31
41{
42 public:
43
48
51
55 QgsRenderContext &renderContext() { return mRenderContext; }
56
61 const QgsRenderContext &renderContext() const SIP_SKIP { return mRenderContext; }
62
68 QgsFeedback *feedback() const { return mFeedback; }
69
75 QImage textureImage() const;
76
82 void setTextureImage( const QImage &image );
83
89 void setTextureCoordinates(
90 float textureX1, float textureY1,
91 float textureX2, float textureY2,
92 float textureX3, float textureY3
93 );
94
100 void textureCoordinates( float &textureX1 SIP_OUT, float &textureY1 SIP_OUT, float &textureX2 SIP_OUT, float &textureY2 SIP_OUT, float &textureX3 SIP_OUT, float &textureY3 SIP_OUT ) const;
101
102 private:
103#ifdef SIP_RUN
105#endif
106
107 QgsRenderContext &mRenderContext;
108 QgsFeedback *mFeedback = nullptr;
109 QImage mTextureImage;
110 float mTextureCoordinates[6] { 0, 0, 0, 0, 0, 0 };
111
112};
113
122class CORE_EXPORT QgsTiledSceneRenderer
123{
124
125#ifdef SIP_RUN
127
128 const QString type = sipCpp->type();
129 if ( type == "texture"_L1 )
130 sipType = sipType_QgsTiledSceneTextureRenderer;
131 else if ( type == "wireframe"_L1 )
132 sipType = sipType_QgsTiledSceneWireframeRenderer;
133 else
134 sipType = 0;
135
136 SIP_END
137#endif
138
139 public:
140
142
143 virtual ~QgsTiledSceneRenderer() = default;
144
148 virtual QString type() const = 0;
149
155
158
161
165 virtual Qgis::TiledSceneRendererFlags flags() const;
166
174 static QgsTiledSceneRenderer *load( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
175
180 virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) const = 0;
181
192 double maximumScreenError() const;
193
204 void setMaximumScreenError( double error );
205
213
221
227 void setTileBorderRenderingEnabled( bool enabled ) { mTileBorderRendering = enabled; }
228
234 bool isTileBorderRenderingEnabled() const { return mTileBorderRendering; }
235
245 virtual void startRender( QgsTiledSceneRenderContext &context );
246
257 virtual void stopRender( QgsTiledSceneRenderContext &context );
258
262 virtual QList<QgsLayerTreeModelLegendNode *> createLegendNodes( QgsLayerTreeLayer *nodeLayer ) SIP_FACTORY;
263
267 virtual QStringList legendRuleKeys() const;
268
272 virtual void renderTriangle( QgsTiledSceneRenderContext &context, const QPolygonF &triangle ) = 0;
273
277 virtual void renderLine( QgsTiledSceneRenderContext &context, const QPolygonF &line ) = 0;
278
279 protected:
280
284 void copyCommonProperties( QgsTiledSceneRenderer *destination ) const;
285
292 void restoreCommonProperties( const QDomElement &element, const QgsReadWriteContext &context );
293
300 void saveCommonProperties( QDomElement &element, const QgsReadWriteContext &context ) const;
301
302 private:
303#ifdef SIP_RUN
305#endif
306
307#ifdef QGISDEBUG
309 QThread *mThread = nullptr;
310#endif
311
312 double mMaximumScreenError = 3;
313 Qgis::RenderUnit mMaximumScreenErrorUnit = Qgis::RenderUnit::Millimeters;
314 bool mTileBorderRendering = false;
315
316};
317
318#endif // QGSTILEDSCENERENDERER_H
RenderUnit
Rendering size units.
Definition qgis.h:5255
@ Millimeters
Millimeters.
Definition qgis.h:5256
QFlags< TiledSceneRendererFlag > TiledSceneRendererFlags
Flags which control how tiled scene 2D renderers behave.
Definition qgis.h:5979
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:44
Layer tree node points to a map layer.
An abstract interface for legend items returned from QgsMapLayerLegend implementation.
A container for the context for various read/write operations on objects.
Contains information about the context of a rendering operation.
Encapsulates the render context for a 2D tiled scene rendering operation.
QgsFeedback * feedback() const
Returns the feedback object used to cancel rendering.
QgsTiledSceneRenderContext & operator=(const QgsTiledSceneRenderContext &)=delete
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
QgsTiledSceneRenderContext(const QgsTiledSceneRenderContext &rh)=delete
const QgsRenderContext & renderContext() const
Returns a reference to the context's render context.
QgsTiledSceneRenderContext(QgsRenderContext &context, QgsFeedback *feedback=nullptr)
Constructor for QgsTiledSceneRenderContext.
void setTileBorderRenderingEnabled(bool enabled)
Sets whether to render the borders of tiles.
void saveCommonProperties(QDomElement &element, const QgsReadWriteContext &context) const
Saves common renderer properties (such as point size and screen error) to the specified DOM element.
virtual QString type() const =0
Returns the identifier of the renderer type.
void setMaximumScreenErrorUnit(Qgis::RenderUnit unit)
Sets the unit for the maximum screen error allowed when rendering the tiled scene.
QgsTiledSceneRenderer(const QgsTiledSceneRenderer &other)=delete
QgsTiledSceneRenderer cannot be copied – use clone() instead.
virtual QDomElement save(QDomDocument &doc, const QgsReadWriteContext &context) const =0
Saves the renderer configuration to an XML element.
Qgis::RenderUnit maximumScreenErrorUnit() const
Returns the unit for the maximum screen error allowed when rendering the tiled scene.
virtual ~QgsTiledSceneRenderer()=default
virtual QgsTiledSceneRenderer * clone() const =0
Create a deep copy of this renderer.
static QgsTiledSceneRenderer * load(QDomElement &element, const QgsReadWriteContext &context)
Creates a renderer from an XML element.
QgsTiledSceneRenderer()=default
double maximumScreenError() const
Returns the maximum screen error allowed when rendering the tiled scene.
QgsTiledSceneRenderer & operator=(const QgsTiledSceneRenderer &other)=delete
QgsTiledSceneRenderer cannot be copied – use clone() instead.
virtual void renderTriangle(QgsTiledSceneRenderContext &context, const QPolygonF &triangle)=0
Renders a triangle.
void setMaximumScreenError(double error)
Sets the maximum screen error allowed when rendering the tiled scene.
virtual void renderLine(QgsTiledSceneRenderContext &context, const QPolygonF &line)=0
Renders a line.
void restoreCommonProperties(const QDomElement &element, const QgsReadWriteContext &context)
Restores common renderer properties (such as screen error) from the specified DOM element.
bool isTileBorderRenderingEnabled() const
Returns whether to render also borders of tiles.
virtual Qgis::TiledSceneRendererFlags flags() const
Returns flags which control how the renderer behaves.
void copyCommonProperties(QgsTiledSceneRenderer *destination) const
Copies common tiled scene renderer properties (such as screen error) to the destination renderer.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:199
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:84
#define SIP_END
Definition qgis_sip.h:216