QGIS API Documentation 4.3.0-Master (0de80482b60)
Loading...
Searching...
No Matches
qgsmergedfeaturerenderer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmergedfeaturerenderer.h
3 ---------------------
4 begin : December 2020
5 copyright : (C) 2020 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#ifndef QGSMERGEDFEATURERENDERER_H
16#define QGSMERGEDFEATURERENDERER_H
17
18#include "qgis.h"
19#include "qgis_core.h"
20#include "qgis_sip.h"
21#include "qgsexpression.h"
22#include "qgsfeature.h"
23#include "qgsgeometry.h"
24#include "qgsrendercontext.h"
25#include "qgsrenderer.h"
26
41{
42 public:
48
53
55 static std::unique_ptr<QgsFeatureRenderer> create( QDomElement &element, const QgsReadWriteContext &context );
56
58 void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
59 Qgis::FeatureRendererFlags flags() const override;
60
71 bool renderFeature( const QgsFeature &feature, QgsRenderContext &context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) override SIP_THROW( QgsCsException );
72
77 void stopRender( QgsRenderContext &context ) override;
78
79 QString dump() const override;
80 QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
81 bool filterNeedsGeometry() const override;
83 QgsSymbolList symbols( QgsRenderContext &context ) const override;
84 QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
85 QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
86 QgsSymbolList symbolsForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
87 QgsSymbolList originalSymbolsForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
88 QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
89 QString legendKeyToExpression( const QString &key, QgsVectorLayer *layer, bool &ok ) const override;
91 bool willRenderFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
92 QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
93 void setEmbeddedRenderer( QgsFeatureRenderer *subRenderer SIP_TRANSFER ) override;
94 const QgsFeatureRenderer *embeddedRenderer() const override;
95 void setLegendSymbolItem( const QString &key, QgsSymbol *symbol ) override;
96 bool legendSymbolItemsCheckable() const override;
97 bool legendSymbolItemChecked( const QString &key ) override;
98 void checkLegendSymbolItem( const QString &key, bool state = true ) override;
99 bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
100
105 static std::unique_ptr<QgsMergedFeatureRenderer> convertFromRenderer( const QgsFeatureRenderer *renderer );
106
107 protected:
114
124
127
129 std::unique_ptr<QgsFeatureRenderer> mSubRenderer;
130
131 private:
133 struct CombinedFeature
134 {
135 QVector<QgsGeometry> geometries; //< list of geometries
136 QgsFeature feature; //< one feature (for attriute-based rendering)
137 };
138 typedef QVector<CombinedFeature> FeatureCategoryVector;
140 FeatureCategoryVector mFeaturesCategories;
141
143 QMap<QByteArray, int> mSymbolCategories;
144
146 QgsPolygonXY mExtentPolygon;
147
149 QgsRenderContext mContext;
150
152 QgsFields mFields;
153
158 struct FeatureDecoration
159 {
160 QgsFeature feature;
161 bool selected;
162 bool drawMarkers;
163 int layer;
164 FeatureDecoration( const QgsFeature &a_feature, bool a_selected, bool a_drawMarkers, int a_layer )
165 : feature( a_feature )
166 , selected( a_selected )
167 , drawMarkers( a_drawMarkers )
168 , layer( a_layer )
169 {}
170 };
171 QList<FeatureDecoration> mFeatureDecorations;
172};
173
174
175#endif // QGSMERGEDFEATURERENDERER_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:62
Custom exception class for Coordinate Reference System related exceptions.
QgsFeatureRenderer(const QString &type)
QFlags< Capability > Capabilities
QString type() const
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:60
Container of fields for a vector layer.
Definition qgsfields.h:45
QgsMergedFeatureRenderer & operator=(const QgsMergedFeatureRenderer &)=delete
Direct copies are forbidden. Use clone() instead.
void setLegendSymbolItem(const QString &key, QgsSymbol *symbol) override
Sets the symbol to be used for a legend symbol item.
static std::unique_ptr< QgsMergedFeatureRenderer > convertFromRenderer(const QgsFeatureRenderer *renderer)
Creates a QgsMergedFeatureRenderer by a conversion from an existing renderer.
QgsSymbol * symbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
To be overridden.
void stopRender(QgsRenderContext &context) override
The actual rendering will take place here.
QSet< QString > legendKeysForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns legend keys matching a specified feature.
QgsSymbolList symbols(QgsRenderContext &context) const override
Returns list of symbols used by the renderer.
QgsSymbolList symbolsForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns list of symbols used for rendering the feature.
void startRender(QgsRenderContext &context, const QgsFields &fields) override
Must be called when a new render cycle is started.
QString legendKeyToExpression(const QString &key, QgsVectorLayer *layer, bool &ok) const override
Attempts to convert the specified legend rule key to a QGIS expression matching the features displaye...
QgsSymbol * originalSymbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns symbol for feature.
QString dump() const override
Returns debug information about this renderer.
QgsMergedFeatureRenderer(QgsFeatureRenderer *embeddedRenderer)
Constructor for QgsMergedFeatureRenderer.
bool renderFeature(const QgsFeature &feature, QgsRenderContext &context, int layer=-1, bool selected=false, bool drawVertexMarker=false) override
Renders a given feature.
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
QgsSymbolList originalSymbolsForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Equivalent of originalSymbolsForFeature() call extended to support renderers that may use more symbol...
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified symbology visitor, causing it to visit all symbols associated with the renderer...
QSet< QString > usedAttributes(const QgsRenderContext &context) const override
Returns a list of attributes required by this renderer.
QgsLegendSymbolList legendSymbolItems() const override
Returns a list of symbology items for the legend.
QDomElement save(QDomDocument &doc, const QgsReadWriteContext &context) override
Stores renderer properties to an XML element.
GeometryOperation
Operations to apply to collected geometries prior to rendering.
@ Merge
Merge features (union/dissolve).
@ InvertOnly
Invert features only (polygons only).
@ MergeAndInvert
Merge and invert features (polygons only).
GeometryOperation mOperation
Operation to apply to collected geometries.
void checkLegendSymbolItem(const QString &key, bool state=true) override
Sets whether the legend symbology item with the specified ley should be checked.
static std::unique_ptr< QgsFeatureRenderer > create(QDomElement &element, const QgsReadWriteContext &context)
Creates a renderer out of an XML, for loading.
bool filterNeedsGeometry() const override
Returns true if this renderer requires the geometry to apply the filter.
bool legendSymbolItemChecked(const QString &key) override
Returns true if the legend symbology item with the specified key is checked.
void setEmbeddedRenderer(QgsFeatureRenderer *subRenderer) override
Sets an embedded renderer (subrenderer) for this feature renderer.
QgsMergedFeatureRenderer(const QgsMergedFeatureRenderer &)=delete
Direct copies are forbidden. Use clone() instead.
std::unique_ptr< QgsFeatureRenderer > mSubRenderer
Embedded renderer.
QgsFeatureRenderer::Capabilities capabilities() override
Returns details about internals of this renderer.
bool legendSymbolItemsCheckable() const override
Returns true if symbology items in legend are checkable.
bool willRenderFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns whether the renderer will render a feature or not.
Qgis::FeatureRendererFlags flags() const override
Returns flags associated with the renderer.
A container for the context for various read/write operations on objects.
Contains information about the context of a rendering operation.
An interface for classes which can visit style entity (e.g.
Abstract base class for all rendered symbols.
Definition qgssymbol.h:227
Represents a vector layer which manages a vector based dataset.
#define SIP_TRANSFER
Definition qgis_sip.h:35
#define SIP_FACTORY
Definition qgis_sip.h:83
#define SIP_THROW(name,...)
Definition qgis_sip.h:215
QVector< QgsPolylineXY > QgsPolygonXY
Polygon: first item of the list is outer ring, inner rings (if any) start from second item.
Definition qgsgeometry.h:92
QList< QgsLegendSymbolItem > QgsLegendSymbolList
QList< QgsSymbol * > QgsSymbolList
Definition qgsrenderer.h:51