QGIS API Documentation  2.14.11-Essen
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 
238  typedef QMap<QgsFeatureId, QPair< QgsFeature, QgsSymbolV2* > > DisplacementGroup;
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
double tolerance() const
Returns the tolerance distance for grouping points.
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
const QgsMapUnitScale & toleranceMapUnitScale() const
Returns the map unit scale object for the distance tolerance.
Container of fields for a vector layer.
Definition: qgsfield.h:187
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 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 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
Placement placement() const
Returns the placement method used for dispersing the points.
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
virtual const QgsFeatureRendererV2 * embeddedRenderer() const
Returns the current embedded renderer (subrenderer) for this feature renderer.
virtual void toSld(QDomDocument &doc, QDomElement &element) const
used from subclasses to create SLD Rule elements following SLD v1.1 specs
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
virtual bool legendSymbolItemsCheckable() const
items of symbology items in legend should be checkable
void setToleranceMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the distance tolerance.
virtual int capabilities()
returns bitwise OR-ed capabilities of the renderer
QgsSymbolV2::OutputUnit toleranceUnit() const
Returns the units for the tolerance distance.
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.