QGIS API Documentation  3.21.0-Master (5b68dc587e)
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 
16 #include "qgsnullsymbolrenderer.h"
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 
40 bool 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() == QgsWkbTypes::NullGeometry ||
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 {
94  copyRendererData( r );
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 
111 QDomElement 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 }
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:52
Qgis::VertexMarkerType mCurrentVertexMarkerType
The current type of editing marker.
Definition: qgsrenderer.h:586
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:589
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:205
QgsWkbTypes::GeometryType type
Definition: qgsgeometry.h:127
Null symbol renderer.
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.
bool renderFeature(const QgsFeature &feature, QgsRenderContext &context, int layer=-1, bool selected=false, bool drawVertexMarker=false) override SIP_THROW(QgsCsException)
Render a feature using this renderer in the given context.
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:38
static QgsSymbol * defaultSymbol(QgsWkbTypes::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
Definition: qgssymbol.cpp:355
#define RENDERER_TAG_NAME
Definition: qgsrenderer.h:50
QList< QgsSymbol * > QgsSymbolList
Definition: qgsrenderer.h:44