QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
qgshighlight.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgshighlight.h - widget to highlight geometries
3  --------------------------------------
4  Date : 02-Mar-2011
5  Copyright : (C) 2011 by Juergen E. Fischer, norBIT GmbH
6  Email : jef at norbit dot de
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 QGSHIGHLIGHT_H
16 #define QGSHIGHLIGHT_H
17 
18 #include "qgis_gui.h"
19 #include "qgsfeature.h"
20 #include "qgsrendercontext.h"
21 #include "qgsmapcanvasitem.h"
22 #include "qgsgeometry.h"
23 #include <QBrush>
24 #include <QColor>
25 #include <QList>
26 #include <QPen>
27 #include <QPainter>
28 #include <QPainterPath>
29 #include <QPointer>
30 
31 class QgsMapLayer;
32 class QgsVectorLayer;
33 class QgsSymbol;
34 class QgsFeatureRenderer;
35 
36 
37 #ifdef SIP_RUN
38 % ModuleHeaderCode
39 // For ConvertToSubClassCode.
40 #include <qgshighlight.h>
41 % End
42 #endif
43 
60 #ifndef SIP_RUN
61 class GUI_EXPORT QgsHighlight: public QObject, public QgsMapCanvasItem
62 {
63 #else
64 class GUI_EXPORT QgsHighlight : public QgsMapCanvasItem
65 {
66 #endif
67 
68  Q_OBJECT
69 
70 #ifdef SIP_RUN
72  if ( dynamic_cast<QgsHighlight *>( sipCpp ) )
73  {
74  sipType = sipType_QgsHighlight;
75  // We need to tweak the pointer as sip believes it is single inheritance
76  // from QgsMapCanvasItem, but the raw address of QgsHighlight (sipCpp)
77  // is actually a QObject
78  *sipCppRet = dynamic_cast<QgsHighlight *>( sipCpp );
79  }
80  else
81  sipType = nullptr;
82  SIP_END
83 #endif
84  public:
85 
86  Q_PROPERTY( QColor color READ color WRITE setColor )
87  Q_PROPERTY( QColor fillColor READ fillColor WRITE setFillColor )
88  Q_PROPERTY( int width READ width WRITE setWidth )
89  Q_PROPERTY( int buffer READ buffer WRITE setBuffer )
90 
91 
97  QgsHighlight( QgsMapCanvas *mapCanvas SIP_TRANSFERTHIS, const QgsGeometry &geom, QgsMapLayer *layer );
98 
106  QgsHighlight( QgsMapCanvas *mapCanvas SIP_TRANSFERTHIS, const QgsFeature &feature, QgsVectorLayer *layer );
107  ~QgsHighlight() override;
108 
113  QColor color( ) const { return mColor; }
114 
119  void setColor( const QColor &color );
120 
125  QColor fillColor( ) const { return mFillColor; }
126 
132  void setFillColor( const QColor &fillColor );
133 
138  int width( ) const { return mWidth; }
139 
145  void setWidth( int width );
146 
151  double buffer( ) const { return mBuffer; }
152 
157  void setBuffer( double buffer ) { mBuffer = buffer; }
158 
163  void setMinWidth( double width ) { mMinWidth = width; }
164 
168  QgsMapLayer *layer() const { return mLayer; }
169 
170  void updatePosition() override;
171 
177  void applyDefaultStyle();
178 
179  protected:
180  void paint( QPainter *p ) override;
181 
183  void updateRect();
184 
185  private slots:
186  void updateTransformedGeometry();
187 
188  private:
189  enum PointSymbol
190  {
191  Square,
192  Circle
193  };
194 
195  void init();
196  void setSymbol( QgsSymbol *symbol, const QgsRenderContext &context, const QColor &color, const QColor &fillColor );
197  double getSymbolWidth( const QgsRenderContext &context, double width, Qgis::RenderUnit unit );
199  std::unique_ptr< QgsFeatureRenderer > createRenderer( QgsRenderContext &context, const QColor &color, const QColor &fillColor );
200  void paintPoint( QgsRenderContext &context, const QgsPoint *point, double size, Qgis::RenderUnit sizeUnit, PointSymbol symbol );
201  void paintLine( QPainter *p, QgsPolylineXY line );
202  void paintPolygon( QPainter *p, const QgsPolygonXY &polygon );
203  QgsRenderContext createRenderContext();
204 
205  int mWidth = 1; // line / stroke width property
206  QColor mColor; // line / stroke color property
207  QColor mFillColor; // line / stroke fillColor property
208  QBrush mBrush;
209  QPen mPen;
210  QgsGeometry mOriginalGeometry;
211  QgsGeometry mGeometry;
212  QPointer< QgsMapLayer > mLayer;
213  QgsFeature mFeature;
214  double mBuffer = 0; // line / stroke buffer in pixels
215  double mMinWidth = 0; // line / stroke minimum width in pixels
216  QgsRenderContext mRenderContext;
217 
218  // we don't want to make PointSymbol public for now, so just grant access selectively via a friend
219  friend class QgsMapToolAddFeature;
220  friend class QgsUpdateGpsDetailsAction;
221  double mPointSizeRadiusMM = 1.5;
222  PointSymbol mPointSymbol = PointSymbol::Square;
223 };
224 
225 #endif
RenderUnit
Rendering size units.
Definition: qgis.h:4221
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:162
A class for highlight features on the map.
Definition: qgshighlight.h:62
double buffer() const
Returns the buffer.
Definition: qgshighlight.h:151
void setBuffer(double buffer)
Set line / stroke buffer in millimeters.
Definition: qgshighlight.h:157
int width() const
Returns the stroke width.
Definition: qgshighlight.h:138
QColor fillColor() const
Returns the fill color.
Definition: qgshighlight.h:125
~QgsHighlight() override
QgsMapLayer * layer() const
Returns the layer for which this highlight has been created.
Definition: qgshighlight.h:168
void setMinWidth(double width)
Set minimum line / stroke width in millimeters.
Definition: qgshighlight.h:163
QColor color() const
Returns the line/stroke color.
Definition: qgshighlight.h:113
An abstract class for items that can be placed on the map canvas.
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:93
Base class for all map layer types.
Definition: qgsmaplayer.h:75
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:49
Contains information about the context of a rendering operation.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:94
Represents a vector layer which manages a vector based data sets.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:191
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_END
Definition: qgis_sip.h:208
QVector< QgsPolylineXY > QgsPolygonXY
Polygon: first item of the list is outer ring, inner rings (if any) start from second item.
Definition: qgsgeometry.h:74
QVector< QgsPointXY > QgsPolylineXY
Polyline as represented as a vector of two-dimensional points.
Definition: qgsgeometry.h:52