QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsnullsymbolrenderer.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsnullsymbolrenderer.cpp
3 ---------------------
4 begin : November 2014
5 copyright : (C) 2014 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17#include "qgssymbol.h"
18#include "qgsgeometry.h"
19
20#include <QDomDocument>
21#include <QDomElement>
22
24 : QgsFeatureRenderer( QStringLiteral( "nullSymbol" ) )
25{
26}
27
29
31{
32 return nullptr;
33}
34
36{
37 return nullptr;
38}
39
40bool QgsNullSymbolRenderer::renderFeature( const QgsFeature &feature, QgsRenderContext &context, int layer, bool selected, bool drawVertexMarker )
41{
42 //render selected features or features being edited only
43 if ( !selected && !drawVertexMarker )
44 {
45 return true;
46 }
47
48 if ( !feature.hasGeometry() ||
49 feature.geometry().type() == Qgis::GeometryType::Null ||
51 return true;
52
53 if ( !mSymbol )
54 {
55 //create default symbol
56 mSymbol.reset( QgsSymbol::defaultSymbol( feature.geometry().type() ) );
57 mSymbol->startRender( context );
58 }
59
60 mSymbol->renderFeature( feature, context, layer, selected, drawVertexMarker, mCurrentVertexMarkerType, mCurrentVertexMarkerSize );
61
62 return true;
63}
64
66{
68
69 if ( mSymbol )
70 {
71 mSymbol->stopRender( context );
72 }
73}
74
76{
77 //return true for every feature - so they are still selectable
78 return true;
79}
80
82{
83 return QSet<QString>();
84}
85
87{
88 return QStringLiteral( "NULL" );
89}
90
92{
95 return r;
96}
97
99{
100 return QgsSymbolList();
101}
102
104{
105 Q_UNUSED( element )
106 Q_UNUSED( context )
108 return r;
109}
110
111QDomElement QgsNullSymbolRenderer::save( QDomDocument &doc, const QgsReadWriteContext &context )
112{
113 Q_UNUSED( context )
114 QDomElement rendererElem = doc.createElement( RENDERER_TAG_NAME );
115 rendererElem.setAttribute( QStringLiteral( "type" ), QStringLiteral( "nullSymbol" ) );
116
117 saveRendererData( doc, rendererElem, context );
118
119 return rendererElem;
120}
121
123{
124 std::unique_ptr< QgsNullSymbolRenderer > res = std::make_unique< QgsNullSymbolRenderer >();
125 renderer->copyRendererData( res.get() );
126 return res.release();
127}
@ Unknown
Unknown types.
@ Null
No geometry.
virtual void stopRender(QgsRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
void copyRendererData(QgsFeatureRenderer *destRenderer) const
Clones generic renderer data to another renderer.
Definition: qgsrenderer.cpp:46
Qgis::VertexMarkerType mCurrentVertexMarkerType
The current type of editing marker.
Definition: qgsrenderer.h:611
void saveRendererData(QDomDocument &doc, QDomElement &element, const QgsReadWriteContext &context)
Saves generic renderer data into the specified element.
double mCurrentVertexMarkerSize
The current size of editing marker.
Definition: qgsrenderer.h:614
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
QgsGeometry geometry
Definition: qgsfeature.h:67
bool hasGeometry() const
Returns true if the feature has an associated geometry.
Definition: qgsfeature.cpp:230
Qgis::GeometryType type
Definition: qgsgeometry.h:165
Null symbol renderer.
bool renderFeature(const QgsFeature &feature, QgsRenderContext &context, int layer=-1, bool selected=false, bool drawVertexMarker=false) override
Render a feature using this renderer in the given context.
QDomElement save(QDomDocument &doc, const QgsReadWriteContext &context) override
Stores renderer properties to an XML element.
QgsSymbol * originalSymbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns symbol for feature.
QgsSymbol * symbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
To be overridden.
QSet< QString > usedAttributes(const QgsRenderContext &context) const override
Returns a list of attributes required by this renderer.
bool willRenderFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns whether the renderer will render a feature or not.
static QgsNullSymbolRenderer * convertFromRenderer(const QgsFeatureRenderer *renderer)
Creates a QgsNullSymbolRenderer from an existing renderer.
void stopRender(QgsRenderContext &context) override
Must be called when a render cycle has finished, to allow the renderer to clean up.
QgsSymbolList symbols(QgsRenderContext &context) const override
Returns list of symbols used by the renderer.
QgsFeatureRenderer * clone() const override
Create a deep copy of this renderer.
QString dump() const override
Returns debug information about this renderer.
static QgsFeatureRenderer * create(QDomElement &element, const QgsReadWriteContext &context)
Creates a null renderer from XML element.
The class is used as a container of context for various read/write operations on other objects.
Contains information about the context of a rendering operation.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:94
static QgsSymbol * defaultSymbol(Qgis::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
Definition: qgssymbol.cpp:705
#define RENDERER_TAG_NAME
Definition: qgsrenderer.h:50
QList< QgsSymbol * > QgsSymbolList
Definition: qgsrenderer.h:44