QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsrubberband.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsrubberband.h - Rubberband widget for drawing multilines and polygons
3 --------------------------------------
4 Date : 07-Jan-2006
5 Copyright : (C) 2006 by Tom Elwertowski
6 Email : telwertowski at users dot sourceforge dot net
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 QGSRUBBERBAND_H
16#define QGSRUBBERBAND_H
17
18#include "qgsmapcanvasitem.h"
19#include "qgis_sip.h"
20#include "qgsgeometry.h"
22
23#include <QBrush>
24#include <QVector>
25#include <QPen>
26#include <QPolygon>
27#include <QObject>
28#include <QSvgRenderer>
29
30#include "qgis_gui.h"
31
32class QgsMapLayer;
33class QgsVectorLayer;
34class QgsMapLayer;
35class QPaintEvent;
36class QgsSymbol;
37
38#ifdef SIP_RUN
39% ModuleHeaderCode
40// For ConvertToSubClassCode.
41#include <qgsrubberband.h>
42% End
43#endif
44
52#ifndef SIP_RUN
53class GUI_EXPORT QgsRubberBand : public QObject, public QgsMapCanvasItem
54{
55#else
56class GUI_EXPORT QgsRubberBand : public QgsMapCanvasItem
57{
58#endif
59 Q_OBJECT
60
61#ifdef SIP_RUN
63 if ( dynamic_cast<QgsRubberBand *>( sipCpp ) )
64 {
65 sipType = sipType_QgsRubberBand;
66 // We need to tweak the pointer as sip believes it is single inheritance
67 // from QgsMapCanvasItem, but the raw address of QgsRubberBand (sipCpp)
68 // is actually a QObject
69 *sipCppRet = dynamic_cast<QgsRubberBand *>( sipCpp );
70 }
71 else
72 sipType = nullptr;
74#endif
75 public:
76
77 Q_PROPERTY( QColor fillColor READ fillColor WRITE setFillColor )
78 Q_PROPERTY( QColor strokeColor READ strokeColor WRITE setStrokeColor )
79 Q_PROPERTY( int iconSize READ iconSize WRITE setIconSize )
80 Q_PROPERTY( QColor secondaryStrokeColor READ secondaryStrokeColor WRITE setSecondaryStrokeColor )
81 Q_PROPERTY( int width READ width WRITE setWidth )
82
83
85 {
86
91
96
101
106
111
116
121
126
131 ICON_SVG
132 };
133
143 ~QgsRubberBand() override;
144
150 void setColor( const QColor &color );
151
156 void setFillColor( const QColor &color );
157
161 QColor fillColor() const { return mBrush.color(); }
162
167 void setStrokeColor( const QColor &color );
168
172 QColor strokeColor() const { return mPen.color(); }
173
179 void setSecondaryStrokeColor( const QColor &color );
180
184 QColor secondaryStrokeColor() const { return mSecondaryPen.color(); }
185
190 void setWidth( int width );
191
195 int width() const { return mPen.width(); }
196
201 void setIcon( IconType icon );
202
210 void setSvgIcon( const QString &path, QPoint drawOffset );
211
212
216 IconType icon() const { return mIconType; }
217
221 void setIconSize( int iconSize );
222
226 int iconSize() const { return mIconSize; }
227
231 void setLineStyle( Qt::PenStyle penStyle );
232
236 void setBrushStyle( Qt::BrushStyle brushStyle );
237
243 void reset( Qgis::GeometryType geometryType = Qgis::GeometryType::Line );
244
254 void addPoint( const QgsPointXY &p, bool doUpdate = true, int geometryIndex = 0, int ringIndex = 0 );
255
263 void closePoints( bool doUpdate = true, int geometryIndex = 0, int ringIndex = 0 );
264
272 void removePoint( int index = 0, bool doUpdate = true, int geometryIndex = 0, int ringIndex = 0 );
273
277 void removeLastPoint( int geometryIndex = 0, bool doUpdate = true, int ringIndex = 0 );
278
283 void movePoint( const QgsPointXY &p, int geometryIndex = 0, int ringIndex = 0 );
284
289 void movePoint( int index, const QgsPointXY &p, int geometryIndex = 0, int ringIndex = 0 );
290
296 int partSize( int geometryIndex ) const;
297
306 void setToGeometry( const QgsGeometry &geom, QgsVectorLayer *layer );
307
317 void setToGeometry( const QgsGeometry &geometry, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem() );
318
323 void setToCanvasRectangle( QRect rect );
324
330 void copyPointsFrom( const QgsRubberBand *other );
331
346 void addGeometry( const QgsGeometry &geometry, QgsMapLayer *layer, bool doUpdate = true );
347
358 void addGeometry( const QgsGeometry &geometry, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem(), bool doUpdate = true );
359
365 void setTranslationOffset( double dx, double dy );
366
371 int size() const;
372
377 int numberOfVertices() const;
378
379 // TODO QGIS 4: rename i to geometryIndex, j to vertexIndex
380 // TODO QGIS 4: reorder parameters to geom, ring, ring
381
388 const QgsPointXY *getPoint( int i, int j = 0, int ringIndex = 0 ) const;
389
394 QgsGeometry asGeometry() const;
395
396 void updatePosition() override;
397
404 QgsSymbol *symbol() const;
405
419 void setSymbol( QgsSymbol *symbol SIP_TRANSFER );
420
421 protected:
422
427 void paint( QPainter *p ) override;
428
434 void drawShape( QPainter *p, const QVector<QPointF> &pts );
435
441 void drawShape( QPainter *p, const QVector<QPolygonF> &rings );
442
444 void updateRect();
445
446 private:
447 QBrush mBrush;
448 QPen mPen;
449 QPen mSecondaryPen;
450
452 int mIconSize = 5;
453
455 IconType mIconType = ICON_CIRCLE;
456 std::unique_ptr<QSvgRenderer> mSvgRenderer;
457 QPoint mSvgOffset;
458
459 std::unique_ptr< QgsSymbol > mSymbol;
460
464 QVector< QVector< QVector <QgsPointXY> > > mPoints;
466 double mTranslationOffsetX = 0.0;
467 double mTranslationOffsetY = 0.0;
468
470
471};
472
473#endif
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
Definition: qgis.h:255
@ Polygon
Polygons.
This class represents a coordinate reference system (CRS).
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:162
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
A class to represent a 2D point.
Definition: qgspointxy.h:60
A class for drawing transient features (e.g.
Definition: qgsrubberband.h:54
~QgsRubberBand() override
QColor fillColor() const
Returns the current fill color.
IconType icon() const
Returns the current icon type to highlight point geometries.
@ ICON_X
A cross is used to highlight points (x)
@ ICON_FULL_DIAMOND
A diamond is used to highlight points (◆)
@ ICON_FULL_BOX
A full box is used to highlight points (■)
@ ICON_NONE
No icon is used.
Definition: qgsrubberband.h:90
@ ICON_CROSS
A cross is used to highlight points (+)
Definition: qgsrubberband.h:95
@ ICON_CIRCLE
A circle is used to highlight points (○)
@ ICON_DIAMOND
A diamond is used to highlight points (◇)
@ ICON_BOX
A box is used to highlight points (□)
QColor secondaryStrokeColor() const
Returns the current secondary stroke color.
int iconSize() const
Returns the current icon size of the point icons.
int width() const
Returns the current width of the line or stroke width for polygon.
QColor strokeColor() const
Returns the current stroke color.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:94
Represents a vector layer which manages a vector based data sets.
QSize iconSize(bool dockableToolbar)
Returns the user-preferred size of a window's toolbar icons.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:191
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_END
Definition: qgis_sip.h:208
const QgsCoordinateReferenceSystem & crs