QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgsgraduatedsymbolrenderer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsgraduatedsymbolrenderer.h
3 ---------------------
4 begin : November 2009
5 copyright : (C) 2009 by Martin Dobias
6 email : wonder dot sk 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 QGSGRADUATEDSYMBOLRENDERER_H
16#define QGSGRADUATEDSYMBOLRENDERER_H
17
18#include "qgis_core.h"
19#include "qgis_sip.h"
20#include "qgis.h"
21#include "qgsrenderer.h"
22#include "qgsrendererrange.h"
24
25class QgsVectorLayer;
26class QgsColorRamp;
28class QgsSymbol;
29class QgsExpression;
30
36{
37 public:
38
39 QgsGraduatedSymbolRenderer( const QString &attrName = QString(), const QgsRangeList &ranges = QgsRangeList() );
40
42
43 QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
44 QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
45 void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
46 void stopRender( QgsRenderContext &context ) override;
47 QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
48 bool filterNeedsGeometry() const override;
49 QString dump() const override;
51 void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props = QVariantMap() ) const override;
52 QgsFeatureRenderer::Capabilities capabilities() override { return SymbolLevels | Filter; }
53 QgsSymbolList symbols( QgsRenderContext &context ) const override;
54 bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
55
61 QString classAttribute() const { return mAttrName; }
62
68 void setClassAttribute( const QString &attr ) { mAttrName = attr; }
69
73 const QgsRangeList &ranges() const { return mRanges; }
74
75 bool updateRangeSymbol( int rangeIndex, QgsSymbol *symbol SIP_TRANSFER );
76 bool updateRangeLabel( int rangeIndex, const QString &label );
77 bool updateRangeUpperValue( int rangeIndex, double value );
78 bool updateRangeLowerValue( int rangeIndex, double value );
80 bool updateRangeRenderState( int rangeIndex, bool render );
81
82 void addClass( QgsSymbol *symbol );
84 void addClass( const QgsRendererRange &range ) SIP_PYNAME( addClassRange );
86 void addClass( double lower, double upper ) SIP_PYNAME( addClassLowerUpper );
87
96 void addBreak( double breakValue, bool updateSymbols = true );
97
98 void deleteClass( int idx );
99 void deleteAllClasses();
100
102 void moveClass( int from, int to );
103
109 bool rangesOverlap() const;
110
116 bool rangesHaveGaps() const;
117
118 void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
119 void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
120
125 QgsClassificationMethod *classificationMethod() const;
126
132 void setClassificationMethod( QgsClassificationMethod *method SIP_TRANSFER );
133
138 enum Mode
139 {
145 Custom
146 };
147 // TODO QGIS 4: remove
148 // this could not be tagged with Q_DECL_DEPRECATED due to Doxygen warning
149 // might be fixed in newer Doxygen (does not on 1.8.13, might be ok on 1.8.16)
150
151
153 Q_DECL_DEPRECATED Mode mode() const SIP_DEPRECATED { return modeFromMethodId( mClassificationMethod->id() ); }
155 Q_DECL_DEPRECATED void setMode( Mode mode ) SIP_DEPRECATED;
156
162 Q_DECL_DEPRECATED bool useSymmetricMode() const SIP_DEPRECATED { return mClassificationMethod->symmetricModeEnabled(); }
163
169 Q_DECL_DEPRECATED void setUseSymmetricMode( bool useSymmetricMode ) SIP_DEPRECATED;
170
176 Q_DECL_DEPRECATED double symmetryPoint() const SIP_DEPRECATED { return mClassificationMethod->symmetryPoint(); }
177
183 Q_DECL_DEPRECATED void setSymmetryPoint( double symmetryPoint ) SIP_DEPRECATED;
184
185
191 Q_DECL_DEPRECATED bool astride() const SIP_DEPRECATED { return mClassificationMethod->symmetryAstride(); }
192
198 Q_DECL_DEPRECATED void setAstride( bool astride ) SIP_DEPRECATED;
199
209 Q_DECL_DEPRECATED static void makeBreaksSymmetric( QList<double> &breaks SIP_INOUT, double symmetryPoint, bool astride ) SIP_DEPRECATED;
210
221 Q_DECL_DEPRECATED static QList<double> calcEqualIntervalBreaks( double minimum, double maximum, int classes, bool useSymmetricMode, double symmetryPoint, bool astride ) SIP_DEPRECATED;
222
234 Q_DECL_DEPRECATED void updateClasses( QgsVectorLayer *vlayer, Mode mode, int nclasses, bool useSymmetricMode = false, double symmetryPoint = 0.0, bool astride = false ) SIP_DEPRECATED;
235
241 void updateClasses( const QgsVectorLayer *vl, int nclasses );
242
244
250 Q_DECL_DEPRECATED QgsRendererRangeLabelFormat labelFormat() const SIP_DEPRECATED;
251
259 Q_DECL_DEPRECATED void setLabelFormat( const QgsRendererRangeLabelFormat &labelFormat, bool updateRanges = false ) SIP_DEPRECATED;
260
262
268 void calculateLabelPrecision( bool updateRanges = true );
269
271
288 Q_DECL_DEPRECATED static QgsGraduatedSymbolRenderer *createRenderer( QgsVectorLayer *vlayer,
289 const QString &attrName,
290 int classes,
291 Mode mode,
292 QgsSymbol *symbol SIP_TRANSFER,
295 bool useSymmetricMode = false,
296 double symmetryPoint = 0.0,
297 const QStringList &listForCboPrettyBreaks = QStringList(),
298 bool astride = false ) SIP_DEPRECATED;
300
302 static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
303
304 QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
305 QgsLegendSymbolList legendSymbolItems() const override;
306 QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
307 QString legendKeyToExpression( const QString &key, QgsVectorLayer *layer, bool &ok ) const override;
308
315 QgsSymbol *sourceSymbol();
316
324 const QgsSymbol *sourceSymbol() const SIP_SKIP;
325
333 void setSourceSymbol( QgsSymbol *sym SIP_TRANSFER );
334
340 QgsColorRamp *sourceColorRamp();
341
348 const QgsColorRamp *sourceColorRamp() const SIP_SKIP;
349
354 void setSourceColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
355
361 void updateColorRamp( QgsColorRamp *ramp SIP_TRANSFER = nullptr );
362
369 void updateSymbols( QgsSymbol *sym );
370
376 void setSymbolSizes( double minSize, double maxSize );
377
382 double minSymbolSize() const;
383
388 double maxSymbolSize() const;
389
396 Qgis::GraduatedMethod graduatedMethod() const { return mGraduatedMethod; }
397
404 void setGraduatedMethod( Qgis::GraduatedMethod method ) { mGraduatedMethod = method; }
405
406 bool legendSymbolItemsCheckable() const override;
407 bool legendSymbolItemChecked( const QString &key ) override;
408 void checkLegendSymbolItem( const QString &key, bool state = true ) override;
409 void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override;
410 QString legendClassificationAttribute() const override { return classAttribute(); }
411
417 static QgsGraduatedSymbolRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer ) SIP_FACTORY;
418
429 void setDataDefinedSizeLegend( QgsDataDefinedSizeLegend *settings SIP_TRANSFER );
430
436 QgsDataDefinedSizeLegend *dataDefinedSizeLegend() const;
437
442 void updateRangeLabels();
443
450 const QgsRendererRange *rangeForValue( double value ) const;
451
452 protected:
453 QString mAttrName;
455 std::unique_ptr<QgsSymbol> mSourceSymbol;
456 std::unique_ptr<QgsColorRamp> mSourceColorRamp;
457
458 std::unique_ptr<QgsExpression> mExpression;
459 Qgis::GraduatedMethod mGraduatedMethod = Qgis::GraduatedMethod::Color;
461
462 int mAttrNum = -1;
463 bool mCounting = false;
464
465 std::unique_ptr<QgsDataDefinedSizeLegend> mDataDefinedSizeLegend;
466
470 QgsSymbol *symbolForValue( double value ) const;
471
475 QString legendKeyForValue( double value ) const;
476
478 static QString graduatedMethodStr( Qgis::GraduatedMethod method ) SIP_SKIP;
479
480 std::shared_ptr<QgsClassificationMethod> mClassificationMethod;
481
482 private:
483
487 QVariant valueForFeature( const QgsFeature &feature, QgsRenderContext &context ) const;
488
490 QgsLegendSymbolList baseLegendSymbolItems() const;
491
492 // TODO QGIS 4: remove
494 static QString methodIdFromMode( QgsGraduatedSymbolRenderer::Mode mode );
495 static QgsGraduatedSymbolRenderer::Mode modeFromMethodId( const QString &methodId );
497
498#ifdef SIP_RUN
501#endif
502
503 friend class TestQgsGraduatedSymbolRenderer;
504
505};
506
507#endif // QGSGRADUATEDSYMBOLRENDERER_H
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:72
GraduatedMethod
Methods for modifying symbols by range in a graduated symbol renderer.
Definition: qgis.h:1731
QgsClassificationMethod is an abstract class for implementations of classification methods.
Abstract base class for color ramps.
Definition: qgscolorramp.h:30
Object that keeps configuration of appearance of marker symbol's data-defined size in legend.
Class for parsing and evaluation of expressions (formerly called "search strings").
virtual bool legendSymbolItemsCheckable() const
items of symbology items in legend should be checkable
virtual bool legendSymbolItemChecked(const QString &key)
items of symbology items in legend is checked
virtual void setLegendSymbolItem(const QString &key, QgsSymbol *symbol)
Sets the symbol to be used for a legend symbol item.
virtual QgsSymbolList symbols(QgsRenderContext &context) const
Returns list of symbols used by the renderer.
virtual void stopRender(QgsRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
virtual void toSld(QDomDocument &doc, QDomElement &element, const QVariantMap &props=QVariantMap()) const
used from subclasses to create SLD Rule elements following SLD v1.1 specs
Definition: qgsrenderer.h:326
virtual QString dump() const
Returns debug information about this renderer.
virtual QSet< QString > usedAttributes(const QgsRenderContext &context) const =0
Returns a list of attributes required by this renderer.
virtual QgsSymbol * symbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const =0
To be overridden.
virtual void checkLegendSymbolItem(const QString &key, bool state=true)
item in symbology was checked
@ Filter
Features may be filtered, i.e. some features may not be rendered (categorized, rule based ....
Definition: qgsrenderer.h:265
virtual bool filterNeedsGeometry() const
Returns true if this renderer requires the geometry to apply the filter.
virtual bool accept(QgsStyleEntityVisitorInterface *visitor) const
Accepts the specified symbology visitor, causing it to visit all symbols associated with the renderer...
virtual QgsSymbol * originalSymbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const
Returns symbol for feature.
Definition: qgsrenderer.cpp:84
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)
Must be called when a new render cycle is started.
Definition: qgsrenderer.cpp:96
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:56
Container of fields for a vector layer.
Definition: qgsfields.h:45
QString legendClassificationAttribute() const override
If supported by the renderer, return classification attribute for the use in legend.
std::unique_ptr< QgsDataDefinedSizeLegend > mDataDefinedSizeLegend
Q_DECL_DEPRECATED bool useSymmetricMode() const
Returns if we want to classify symmetric around a given value.
std::unique_ptr< QgsSymbol > mSourceSymbol
void setGraduatedMethod(Qgis::GraduatedMethod method)
Set the method used for graduation (either size or color).
std::shared_ptr< QgsClassificationMethod > mClassificationMethod
Q_DECL_DEPRECATED bool astride() const
Returns if we want to have a central class astride the pivot value.
QgsFeatureRenderer::Capabilities capabilities() override
Returns details about internals of this renderer.
QString classAttribute() const
Returns the attribute name (or expression) used for the classification.
std::unique_ptr< QgsColorRamp > mSourceColorRamp
Q_DECL_DEPRECATED Mode mode() const
void setClassAttribute(const QString &attr)
Sets the attribute name (or expression) used for the classification.
std::unique_ptr< QgsExpression > mExpression
const QgsRangeList & ranges() const
Returns a list of all ranges used in the classification.
Q_DECL_DEPRECATED double symmetryPoint() const
Returns the pivot value for symmetric classification.
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.
An interface for classes which can visit style entity (e.g.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:93
Represents a vector layer which manages a vector based data sets.
int ANALYSIS_EXPORT lower(int n, int i)
Lower function.
Definition: MathUtils.cpp:407
#define Q_NOWARN_DEPRECATED_POP
Definition: qgis.h:3061
#define Q_NOWARN_DEPRECATED_PUSH
Definition: qgis.h:3060
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_INOUT
Definition: qgis_sip.h:71
QList< QgsLegendSymbolItem > QgsLegendSymbolList
QList< QgsSymbol * > QgsSymbolList
Definition: qgsrenderer.h:44
QList< QgsRendererRange > QgsRangeList