QGIS API Documentation 3.40.0-Bratislava (b56115d8743)
Loading...
Searching...
No Matches
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
31class QgsMapLayer;
32class QgsVectorLayer;
33class QgsSymbol;
35
36
37#ifdef SIP_RUN
38% ModuleHeaderCode
39// For ConvertToSubClassCode.
40#include <qgshighlight.h>
41% End
42#endif
43
60#ifndef SIP_RUN
61class GUI_EXPORT QgsHighlight: public QObject, public QgsMapCanvasItem
62{
63#else
64class 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;
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
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:4839
Abstract base class for all 2D vector feature renderers.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:58
A geometry is the spatial representation of a feature.
A class for highlight features on the map.
QgsMapLayer * layer() const
Returns the layer for which this highlight has been created.
double buffer() const
Returns the buffer.
void setBuffer(double buffer)
Set line / stroke buffer in millimeters.
int width() const
Returns the stroke width.
QColor fillColor() const
Returns the fill color.
void setMinWidth(double width)
Set minimum line / stroke width in millimeters.
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.
Base class for all map layer types.
Definition qgsmaplayer.h:76
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:231
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:62