QGIS API Documentation  2.14.11-Essen
qgspointdisplacementrenderer.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgspointdisplacementrenderer.cpp
3  --------------------------------
4  begin : January 26, 2010
5  copyright : (C) 2010 by Marco Hugentobler
6  email : marco at hugis dot net
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef QGSPOINTDISPLACEMENTRENDERER_H
19 #define QGSPOINTDISPLACEMENTRENDERER_H
20 
21 #include "qgsfeature.h"
22 #include "qgssymbolv2.h"
23 #include "qgspoint.h"
24 #include "qgsrendererv2.h"
25 #include <QFont>
26 #include <QSet>
27 
28 class QgsSpatialIndex;
29 
32 {
33  public:
34 
37  enum Placement
38  {
39  Ring,
40  ConcentricRings
41  };
42 
43  QgsPointDisplacementRenderer( const QString& labelAttributeName = "" );
45 
46  QgsPointDisplacementRenderer* clone() const override;
47 
49  virtual void toSld( QDomDocument& doc, QDomElement &element ) const override;
51  virtual void toSld( QDomDocument& doc, QDomElement &element, const QgsStringMap& props ) const override;
52 
54  bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) override;
55 
57  virtual QList<QString> usedAttributes() override;
59  virtual int capabilities() override;
63  virtual QgsSymbolV2List symbols( QgsRenderContext& context ) override;
67  virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature, QgsRenderContext& context ) override;
71  virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feat, QgsRenderContext& context ) override;
75  virtual QgsSymbolV2List symbolsForFeature( QgsFeature& feat, QgsRenderContext& context ) override;
79  virtual QgsSymbolV2List originalSymbolsForFeature( QgsFeature& feat, QgsRenderContext& context ) override;
83  virtual QSet< QString > legendKeysForFeature( QgsFeature& feature, QgsRenderContext& context ) override;
87  virtual bool willRenderFeature( QgsFeature& feat, QgsRenderContext& context ) override;
88 
89  virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
90 
91  void stopRender( QgsRenderContext& context ) override;
92 
94  static QgsFeatureRendererV2* create( QDomElement& symbologyElem );
95  QDomElement save( QDomDocument& doc ) override;
96 
98 
100  QgsLegendSymbolList legendSymbolItems( double scaleDenominator = -1, const QString& rule = "" ) override;
101 
102  void setLabelAttributeName( const QString& name ) { mLabelAttributeName = name; }
103  QString labelAttributeName() const { return mLabelAttributeName; }
104 
105  void setEmbeddedRenderer( QgsFeatureRendererV2* r ) override;
106  const QgsFeatureRendererV2* embeddedRenderer() const override;
107 
108  virtual void setLegendSymbolItem( const QString& key, QgsSymbolV2* symbol ) override;
109 
110  virtual bool legendSymbolItemsCheckable() const override;
111  virtual bool legendSymbolItemChecked( const QString& key ) override;
112  virtual void checkLegendSymbolItem( const QString& key, bool state = true ) override;
113 
116  Q_DECL_DEPRECATED void setDisplacementGroups( const QList<QMap<QgsFeatureId, QgsFeature> >& list ) { Q_UNUSED( list ); }
117 
118  void setLabelFont( const QFont& f ) { mLabelFont = f; }
119  QFont labelFont() const { return mLabelFont;}
120 
121  void setCircleWidth( double w ) { mCircleWidth = w; }
122  double circleWidth() const { return mCircleWidth; }
123 
124  void setCircleColor( const QColor& c ) { mCircleColor = c; }
125  QColor circleColor() const { return mCircleColor; }
126 
127  void setLabelColor( const QColor& c ) { mLabelColor = c;}
128  QColor labelColor() const { return mLabelColor; }
129 
130  void setCircleRadiusAddition( double d ) { mCircleRadiusAddition = d; }
131  double circleRadiusAddition() const { return mCircleRadiusAddition; }
132 
133  void setMaxLabelScaleDenominator( double d ) { mMaxLabelScaleDenominator = d; }
134  double maxLabelScaleDenominator() const { return mMaxLabelScaleDenominator; }
135 
140  Placement placement() const { return mPlacement; }
141 
147  void setPlacement( Placement placement ) { mPlacement = placement; }
148 
150  QgsMarkerSymbolV2* centerSymbol() { return mCenterSymbol;}
152  void setCenterSymbol( QgsMarkerSymbolV2* symbol );
153 
160  void setTolerance( double t ) { mTolerance = t; }
161 
167  double tolerance() const { return mTolerance; }
168 
175  void setToleranceUnit( QgsSymbolV2::OutputUnit unit ) { mToleranceUnit = unit; }
176 
182  QgsSymbolV2::OutputUnit toleranceUnit() const { return mToleranceUnit; }
183 
190  void setToleranceMapUnitScale( const QgsMapUnitScale& scale ) { mToleranceMapUnitScale = scale; }
191 
197  const QgsMapUnitScale& toleranceMapUnitScale() const { return mToleranceMapUnitScale; }
198 
202  static QgsPointDisplacementRenderer* convertFromRenderer( const QgsFeatureRendererV2 *renderer );
203 
204  private:
205 
207  QgsFeatureRendererV2* mRenderer;
208 
210  QString mLabelAttributeName;
212  int mLabelIndex;
213 
215  QgsMarkerSymbolV2* mCenterSymbol;
216 
218  double mTolerance;
219  QgsSymbolV2::OutputUnit mToleranceUnit;
220  QgsMapUnitScale mToleranceMapUnitScale;
221 
222  Placement mPlacement;
223 
225  QFont mLabelFont;
226  QColor mLabelColor;
228  double mCircleWidth;
230  QColor mCircleColor;
232  double mCircleRadiusAddition;
234  bool mDrawLabels;
236  double mMaxLabelScaleDenominator;
237 
240  QList<DisplacementGroup> mDisplacementGroups;
242  QMap<QgsFeatureId, int> mGroupIndex;
244  QgsSpatialIndex* mSpatialIndex;
246  QSet<QgsFeatureId> mSelectedFeatures;
247 
249  QgsRectangle searchRect( const QgsPoint& p, double distance ) const;
251  void printInfoDisplacementGroups();
252 
254  QString getLabel( const QgsFeature& f );
255 
256  //rendering methods
257  void renderPoint( const QPointF& point, QgsSymbolV2RenderContext& context, const QList<QgsMarkerSymbolV2*>& symbols,
258  const QStringList& labels );
259 
260  //helper functions
261  void calculateSymbolAndLabelPositions( QgsSymbolV2RenderContext &symbolContext, QPointF centerPoint, int nPosition, double symbolDiagonal, QList<QPointF>& symbolPositions, QList<QPointF>& labelShifts , double &circleRadius ) const;
262  void drawGroup( const DisplacementGroup& group, QgsRenderContext& context );
263  void drawCircle( double radiusPainterUnits, QgsSymbolV2RenderContext& context, QPointF centerPoint, int nSymbols );
264  void drawSymbols( const QgsFeatureList& features, QgsRenderContext& context, const QList< QgsMarkerSymbolV2* >& symbolList, const QList<QPointF>& symbolPositions, bool selected = false );
265  void drawLabels( QPointF centerPoint, QgsSymbolV2RenderContext& context, const QList<QPointF>& labelShifts, const QStringList& labelList );
267  QgsSymbolV2* firstSymbolForFeature( QgsFeatureRendererV2* r, QgsFeature& f, QgsRenderContext& context );
268 };
269 
270 #endif // QGSPOINTDISPLACEMENTRENDERER_H
A rectangle specified with double values.
Definition: qgsrectangle.h:35
Placement
Placement methods for dispersing points.
virtual QSet< QString > legendKeysForFeature(QgsFeature &feature, QgsRenderContext &context)
Return legend keys matching a specified feature.
OutputUnit
The unit of the output.
Definition: qgssymbolv2.h:62
const QgsMapUnitScale & toleranceMapUnitScale() const
Returns the map unit scale object for the distance tolerance.
QgsSymbolV2::OutputUnit toleranceUnit() const
Returns the units for the tolerance distance.
virtual Q_DECL_DEPRECATED QgsSymbolV2 * originalSymbolForFeature(QgsFeature &feature)
Return symbol for feature.
void setLabelAttributeName(const QString &name)
virtual QDomElement save(QDomDocument &doc)
store renderer info to XML element
Container of fields for a vector layer.
Definition: qgsfield.h:187
double tolerance() const
Returns the tolerance distance for grouping points.
virtual QList< QString > usedAttributes()=0
Returns a set of attributes required for this renderer.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:187
virtual void toSld(QDomDocument &doc, QDomElement &element) const
used from subclasses to create SLD Rule elements following SLD v1.1 specs
virtual Q_DECL_DEPRECATED bool willRenderFeature(QgsFeature &feat)
Returns whether the renderer will render a feature or not.
virtual bool legendSymbolItemChecked(const QString &key)
items of symbology items in legend is checked
virtual void checkLegendSymbolItem(const QString &key, bool state=true)
item in symbology was checked
virtual QgsLegendSymbologyList legendSymbologyItems(QSize iconSize)
return a list of symbology items for the legend
virtual const QgsFeatureRendererV2 * embeddedRenderer() const
Returns the current embedded renderer (subrenderer) for this feature renderer.
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)=0
Needs to be called when a new render cycle is started.
void setToleranceUnit(QgsSymbolV2::OutputUnit unit)
Sets the units for the tolerance distance.
virtual void stopRender(QgsRenderContext &context)=0
Needs to be called when a render cycle has finished to clean up.
virtual Q_DECL_DEPRECATED QgsSymbolV2List originalSymbolsForFeature(QgsFeature &feat)
Equivalent of originalSymbolsForFeature() call extended to support renderers that may use more symbol...
virtual bool renderFeature(QgsFeature &feature, QgsRenderContext &context, int layer=-1, bool selected=false, bool drawVertexMarker=false)
Render a feature using this renderer in the given context.
virtual void setEmbeddedRenderer(QgsFeatureRendererV2 *subRenderer)
Sets an embedded renderer (subrenderer) for this feature renderer.
virtual QgsFeatureRendererV2 * clone() const =0
virtual Q_DECL_DEPRECATED QgsSymbolV2 * symbolForFeature(QgsFeature &feature)
To be overridden.
virtual QgsLegendSymbolList legendSymbolItems(double scaleDenominator=-1, const QString &rule="")
return a list of item text / symbol
void setPlacement(Placement placement)
Sets the placement method used for dispersing the points.
virtual Q_DECL_DEPRECATED QgsSymbolV2List symbols()
For symbol levels.
A class to represent a point.
Definition: qgspoint.h:65
A renderer that automatically displaces points with the same position.
Contains information about the context of a rendering operation.
Struct for storing maximum and minimum scales for measurements in map units.
virtual Q_DECL_DEPRECATED QgsSymbolV2List symbolsForFeature(QgsFeature &feat)
Returns list of symbols used for rendering the feature.
Q_DECL_DEPRECATED void setDisplacementGroups(const QList< QMap< QgsFeatureId, QgsFeature > > &list)
not available in python bindings
void setToleranceMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the distance tolerance.
Placement placement() const
Returns the placement method used for dispersing the points.
virtual bool legendSymbolItemsCheckable() const
items of symbology items in legend should be checkable
virtual int capabilities()
returns bitwise OR-ed capabilities of the renderer
QgsMarkerSymbolV2 * centerSymbol()
Returns the symbol for the center of a displacement group (but not ownership of the symbol) ...
virtual void setLegendSymbolItem(const QString &key, QgsSymbolV2 *symbol)
Sets the symbol to be used for a legend symbol item.
void setTolerance(double t)
Sets the tolerance distance for grouping points.