QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
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 
25 class QgsVectorLayer;
26 class QgsColorRamp;
28 class QgsSymbol;
29 class QgsExpression;
30 
36 {
37  public:
38 
39  QgsGraduatedSymbolRenderer( const QString &attrName = QString(), const QgsRangeList &ranges = QgsRangeList() );
40 
41  ~QgsGraduatedSymbolRenderer() override;
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 );
79  bool updateRangeRenderState( int rangeIndex, bool render );
80 
81  void addClass( QgsSymbol *symbol );
83  void addClass( const QgsRendererRange &range ) SIP_PYNAME( addClassRange );
85  void addClass( double lower, double upper ) SIP_PYNAME( addClassLowerUpper );
86 
94  void addBreak( double breakValue, bool updateSymbols = true );
95 
96  void deleteClass( int idx );
97  void deleteAllClasses();
98 
100  void moveClass( int from, int to );
101 
106  bool rangesOverlap() const;
107 
112  bool rangesHaveGaps() const;
113 
114  void sortByValue( Qt::SortOrder order = Qt::AscendingOrder );
115  void sortByLabel( Qt::SortOrder order = Qt::AscendingOrder );
116 
121  QgsClassificationMethod *classificationMethod() const;
122 
128  void setClassificationMethod( QgsClassificationMethod *method SIP_TRANSFER );
129 
134  enum Mode
135  {
141  Custom
142  };
143  // TODO QGIS 4: remove
144  // this could not be tagged with Q_DECL_DEPRECATED due to Doxygen warning
145  // might be fixed in newer Doxygen (does not on 1.8.13, might be ok on 1.8.16)
146 
147 
149  Q_DECL_DEPRECATED Mode mode() const SIP_DEPRECATED { return modeFromMethodId( mClassificationMethod->id() ); }
151  Q_DECL_DEPRECATED void setMode( Mode mode ) SIP_DEPRECATED;
152 
158  Q_DECL_DEPRECATED bool useSymmetricMode() const SIP_DEPRECATED { return mClassificationMethod->symmetricModeEnabled(); }
159 
165  Q_DECL_DEPRECATED void setUseSymmetricMode( bool useSymmetricMode ) SIP_DEPRECATED;
166 
172  Q_DECL_DEPRECATED double symmetryPoint() const SIP_DEPRECATED { return mClassificationMethod->symmetryPoint(); }
173 
179  Q_DECL_DEPRECATED void setSymmetryPoint( double symmetryPoint ) SIP_DEPRECATED;
180 
181 
187  Q_DECL_DEPRECATED bool astride() const SIP_DEPRECATED { return mClassificationMethod->symmetryAstride(); }
188 
194  Q_DECL_DEPRECATED void setAstride( bool astride ) SIP_DEPRECATED;
195 
205  Q_DECL_DEPRECATED static void makeBreaksSymmetric( QList<double> &breaks SIP_INOUT, double symmetryPoint, bool astride ) SIP_DEPRECATED;
206 
217  Q_DECL_DEPRECATED static QList<double> calcEqualIntervalBreaks( double minimum, double maximum, int classes, bool useSymmetricMode, double symmetryPoint, bool astride ) SIP_DEPRECATED;
218 
229  Q_DECL_DEPRECATED void updateClasses( QgsVectorLayer *vlayer, Mode mode, int nclasses, bool useSymmetricMode = false, double symmetryPoint = 0.0, bool astride = false ) SIP_DEPRECATED;
230 
236  void updateClasses( const QgsVectorLayer *vl, int nclasses );
237 
239 
244  Q_DECL_DEPRECATED QgsRendererRangeLabelFormat labelFormat() const SIP_DEPRECATED;
245 
252  Q_DECL_DEPRECATED void setLabelFormat( const QgsRendererRangeLabelFormat &labelFormat, bool updateRanges = false ) SIP_DEPRECATED;
253 
255 
260  void calculateLabelPrecision( bool updateRanges = true );
261 
263 
280  Q_DECL_DEPRECATED static QgsGraduatedSymbolRenderer *createRenderer( QgsVectorLayer *vlayer,
281  const QString &attrName,
282  int classes,
283  Mode mode,
284  QgsSymbol *symbol SIP_TRANSFER,
287  bool useSymmetricMode = false,
288  double symmetryPoint = 0.0,
289  const QStringList &listForCboPrettyBreaks = QStringList(),
290  bool astride = false ) SIP_DEPRECATED;
292 
294  static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY;
295 
296  QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
297  QgsLegendSymbolList legendSymbolItems() const override;
298  QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override;
299  QString legendKeyToExpression( const QString &key, QgsVectorLayer *layer, bool &ok ) const override;
300 
307  QgsSymbol *sourceSymbol();
308 
316  const QgsSymbol *sourceSymbol() const SIP_SKIP;
317 
325  void setSourceSymbol( QgsSymbol *sym SIP_TRANSFER );
326 
332  QgsColorRamp *sourceColorRamp();
333 
340  const QgsColorRamp *sourceColorRamp() const SIP_SKIP;
341 
346  void setSourceColorRamp( QgsColorRamp *ramp SIP_TRANSFER );
347 
353  void updateColorRamp( QgsColorRamp *ramp SIP_TRANSFER = nullptr );
354 
361  void updateSymbols( QgsSymbol *sym );
362 
367  void setSymbolSizes( double minSize, double maxSize );
368 
372  double minSymbolSize() const;
373 
377  double maxSymbolSize() const;
378 
384  Qgis::GraduatedMethod graduatedMethod() const { return mGraduatedMethod; }
385 
391  void setGraduatedMethod( Qgis::GraduatedMethod method ) { mGraduatedMethod = method; }
392 
393  bool legendSymbolItemsCheckable() const override;
394  bool legendSymbolItemChecked( const QString &key ) override;
395  void checkLegendSymbolItem( const QString &key, bool state = true ) override;
396  void setLegendSymbolItem( const QString &key, QgsSymbol *symbol SIP_TRANSFER ) override;
397  QString legendClassificationAttribute() const override { return classAttribute(); }
398 
403  static QgsGraduatedSymbolRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer ) SIP_FACTORY;
404 
414  void setDataDefinedSizeLegend( QgsDataDefinedSizeLegend *settings SIP_TRANSFER );
415 
420  QgsDataDefinedSizeLegend *dataDefinedSizeLegend() const;
421 
426  void updateRangeLabels();
427 
434  const QgsRendererRange *rangeForValue( double value ) const;
435 
436  protected:
437  QString mAttrName;
439  std::unique_ptr<QgsSymbol> mSourceSymbol;
440  std::unique_ptr<QgsColorRamp> mSourceColorRamp;
441 
442  std::unique_ptr<QgsExpression> mExpression;
445 
446  int mAttrNum = -1;
447  bool mCounting = false;
448 
449  std::unique_ptr<QgsDataDefinedSizeLegend> mDataDefinedSizeLegend;
450 
454  QgsSymbol *symbolForValue( double value ) const;
455 
459  QString legendKeyForValue( double value ) const;
460 
462  static QString graduatedMethodStr( Qgis::GraduatedMethod method ) SIP_SKIP;
463 
464  std::shared_ptr<QgsClassificationMethod> mClassificationMethod;
465 
466  private:
467 
471  QVariant valueForFeature( const QgsFeature &feature, QgsRenderContext &context ) const;
472 
474  QgsLegendSymbolList baseLegendSymbolItems() const;
475 
476  // TODO QGIS 4: remove
478  static QString methodIdFromMode( QgsGraduatedSymbolRenderer::Mode mode );
479  static QgsGraduatedSymbolRenderer::Mode modeFromMethodId( const QString &methodId );
481 
482 #ifdef SIP_RUN
485 #endif
486 
487  friend class TestQgsGraduatedSymbolRenderer;
488 
489 };
490 
491 #endif // QGSGRADUATEDSYMBOLRENDERER_H
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:54
GraduatedMethod
Methods for modifying symbols by range in a graduated symbol renderer.
Definition: qgis.h:2670
@ Color
Alter color of symbols.
QgsClassificationMethod is an abstract class for implementations of classification methods.
Abstract base class for color ramps.
Definition: qgscolorramp.h:29
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 QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
virtual bool legendSymbolItemsCheckable() const
Returns true if symbology items in legend are checkable.
virtual bool legendSymbolItemChecked(const QString &key)
Returns true if the legend symbology item with the specified key 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.
QFlags< Capability > Capabilities
Definition: qgsrenderer.h:276
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:331
virtual QgsSymbol * symbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const =0
To be overridden.
virtual QString dump() const
Returns debug information about this renderer.
virtual void checkLegendSymbolItem(const QString &key, bool state=true)
Sets whether the legend symbology item with the specified ley should be checked.
@ Filter
Features may be filtered, i.e. some features may not be rendered (categorized, rule based ....
Definition: qgsrenderer.h:272
virtual bool filterNeedsGeometry() const
Returns true if this renderer requires the geometry to apply the filter.
virtual QSet< QString > usedAttributes(const QgsRenderContext &context) const =0
Returns a list of attributes required by this renderer.
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:78
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)
Must be called when a new render cycle is started.
Definition: qgsrenderer.cpp:90
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.
const QgsRangeList & ranges() const
Returns a list of all ranges used in 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
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:94
Represents a vector layer which manages a vector based data sets.
int ANALYSIS_EXPORT lower(int n, int i)
Lower function.
Definition: MathUtils.cpp:337
#define Q_NOWARN_DEPRECATED_POP
Definition: qgis.h:5741
#define Q_NOWARN_DEPRECATED_PUSH
Definition: qgis.h:5740
#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