QGIS API Documentation  3.8.0-Zanzibar (11aff65)
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 "qgis_core.h"
22 #include "qgis.h"
24 
31 {
32  public:
33 
37  enum Placement
38  {
39  Ring,
41  Grid
42  };
43 
48  QgsPointDisplacementRenderer( const QString &labelAttributeName = QString() );
49 
51  void startRender( QgsRenderContext &context, const QgsFields &fields ) override;
52  void stopRender( QgsRenderContext &context ) override;
53  QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override;
54  QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
55 
57  static QgsFeatureRenderer *create( QDomElement &symbologyElem, const QgsReadWriteContext &context ) SIP_FACTORY;
58 
65  void setCircleWidth( double width ) { mCircleWidth = width; }
66 
72  double circleWidth() const { return mCircleWidth; }
73 
80  void setCircleColor( const QColor &color ) { mCircleColor = color; }
81 
87  QColor circleColor() const { return mCircleColor; }
88 
94  void setCircleRadiusAddition( double distance ) { mCircleRadiusAddition = distance; }
95 
100  double circleRadiusAddition() const { return mCircleRadiusAddition; }
101 
108  void setLabelDistanceFactor( double factor ) { mLabelDistanceFactor = factor; }
109 
115  double labelDistanceFactor() const { return mLabelDistanceFactor; }
116 
122  Placement placement() const { return mPlacement; }
123 
130  void setPlacement( Placement placement ) { mPlacement = placement; }
131 
136  QgsMarkerSymbol *centerSymbol();
137 
143  void setCenterSymbol( QgsMarkerSymbol *symbol SIP_TRANSFER );
144 
150  static QgsPointDisplacementRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer ) SIP_FACTORY;
151 
152  private:
153 #ifdef SIP_RUN
156 #endif
157 
159  std::unique_ptr< QgsMarkerSymbol > mCenterSymbol;
160 
162  Placement mPlacement = Ring;
163 
165  double mCircleWidth = 0.4;
167  QColor mCircleColor;
169  double mCircleRadiusAddition = 0;
171  double mLabelDistanceFactor = 0.5;
172 
173  void drawGroup( QPointF centerPoint, QgsRenderContext &context, const QgsPointDistanceRenderer::ClusteredGroup &group ) override SIP_FORCE;
174 
175  //helper functions
176  void calculateSymbolAndLabelPositions( QgsSymbolRenderContext &symbolContext, QPointF centerPoint, int nPosition, double symbolDiagonal, QList<QPointF> &symbolPositions, QList<QPointF> &labelShifts, double &circleRadius,
177  double &gridRadius, int &gridSize, QVector<double> &diagonals ) const;
178  void drawCircle( double radiusPainterUnits, QgsSymbolRenderContext &context, QPointF centerPoint, int nSymbols );
179  void drawSymbols( const ClusteredGroup &group, QgsRenderContext &context, const QList<QPointF> &symbolPositions );
180  void drawGrid( int gridSizeUnits, QgsSymbolRenderContext &context,
181  QList<QPointF> pointSymbolPositions, int nSymbols );
182  void centralizeGrid( QList<QPointF> &pointSymbolPositions, double radius, int size ) const;
183 };
184 
185 #endif // QGSPOINTDISPLACEMENTRENDERER_H
An abstract base class for distance based point renderers (e.g., clusterer and displacement renderers...
The class is used as a container of context for various read/write operations on other objects...
Placement
Placement methods for dispersing points.
double circleRadiusAddition() const
Returns the factor for increasing the ring size of displacement groups.
Container of fields for a vector layer.
Definition: qgsfields.h:42
A marker symbol type, for rendering Point and MultiPoint geometries.
Definition: qgssymbol.h:766
double labelDistanceFactor() const
Returns the factor for label distance from the symbol.
void setCircleColor(const QColor &color)
Sets the color used for drawing the displacement group circle.
#define SIP_FORCE
Definition: qgis_sip.h:124
#define SIP_TRANSFER
Definition: qgis_sip.h:36
QColor circleColor() const
Returns the color used for drawing the displacement group circle.
Place points in concentric rings around group.
void setPlacement(Placement placement)
Sets the placement method used for dispersing the points.
#define SIP_FACTORY
Definition: qgis_sip.h:69
void setLabelDistanceFactor(double factor)
Sets a factor for increasing the label distances from the symbol.
Place points in a single ring around group.
A renderer that automatically displaces points with the same geographic location. ...
Contains information about the context of a rendering operation.
QList< QgsPointDistanceRenderer::GroupedFeature > ClusteredGroup
A group of clustered points (ie features within the distance tolerance).
Placement placement() const
Returns the placement method used for dispersing the points.
void setCircleRadiusAddition(double distance)
Sets a factor for increasing the ring size of displacement groups.
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
double circleWidth() const
Returns the line width for the displacement group circle in mm.