QGIS API Documentation 3.41.0-Master (af5edcb665c)
Loading...
Searching...
No Matches
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 Q_PROPERTY( QColor fillColor READ fillColor WRITE setFillColor )
77 Q_PROPERTY( QColor strokeColor READ strokeColor WRITE setStrokeColor )
78 Q_PROPERTY( int iconSize READ iconSize WRITE setIconSize )
79 Q_PROPERTY( QColor secondaryStrokeColor READ secondaryStrokeColor WRITE setSecondaryStrokeColor )
80 Q_PROPERTY( int width READ width WRITE setWidth )
81
132
142 ~QgsRubberBand() override;
143
149 void setColor( const QColor &color );
150
155 void setFillColor( const QColor &color );
156
160 QColor fillColor() const { return mBrush.color(); }
161
166 void setStrokeColor( const QColor &color );
167
171 QColor strokeColor() const { return mPen.color(); }
172
178 void setSecondaryStrokeColor( const QColor &color );
179
183 QColor secondaryStrokeColor() const { return mSecondaryPen.color(); }
184
189 void setWidth( double width );
190
194 int width() const { return mPen.width(); }
195
200 void setIcon( IconType icon );
201
209 void setSvgIcon( const QString &path, QPoint drawOffset );
210
211
215 IconType icon() const { return mIconType; }
216
220 void setIconSize( double iconSize );
221
225 double iconSize() const { return mIconSize; }
226
230 void setLineStyle( Qt::PenStyle penStyle );
231
235 void setBrushStyle( Qt::BrushStyle brushStyle );
236
242 void reset( Qgis::GeometryType geometryType = Qgis::GeometryType::Line );
243
253 void addPoint( const QgsPointXY &p, bool doUpdate = true, int geometryIndex = 0, int ringIndex = 0 );
254
262 void closePoints( bool doUpdate = true, int geometryIndex = 0, int ringIndex = 0 );
263
271 void removePoint( int index = 0, bool doUpdate = true, int geometryIndex = 0, int ringIndex = 0 );
272
276 void removeLastPoint( int geometryIndex = 0, bool doUpdate = true, int ringIndex = 0 );
277
282 void movePoint( const QgsPointXY &p, int geometryIndex = 0, int ringIndex = 0 );
283
288 void movePoint( int index, const QgsPointXY &p, int geometryIndex = 0, int ringIndex = 0 );
289
295 int partSize( int geometryIndex ) const;
296
305 void setToGeometry( const QgsGeometry &geom, QgsVectorLayer *layer );
306
316 void setToGeometry( const QgsGeometry &geometry, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem() );
317
322 void setToCanvasRectangle( QRect rect );
323
329 void copyPointsFrom( const QgsRubberBand *other );
330
345 void addGeometry( const QgsGeometry &geometry, QgsMapLayer *layer, bool doUpdate = true );
346
357 void addGeometry( const QgsGeometry &geometry, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem(), bool doUpdate = true );
358
364 void setTranslationOffset( double dx, double dy );
365
370 int size() const;
371
376 int numberOfVertices() const;
377
378 // TODO QGIS 4: rename i to geometryIndex, j to vertexIndex
379 // TODO QGIS 4: reorder parameters to geom, ring, ring
380
387 const QgsPointXY *getPoint( int i, int j = 0, int ringIndex = 0 ) const;
388
393 QgsGeometry asGeometry() const;
394
395 void updatePosition() override;
396
403 QgsSymbol *symbol() const;
404
418 void setSymbol( QgsSymbol *symbol SIP_TRANSFER );
419
420 protected:
425 void paint( QPainter *p ) override;
426
432 void drawShape( QPainter *p, const QVector<QPointF> &pts );
433
439 void drawShape( QPainter *p, const QVector<QPolygonF> &rings );
440
442 void updateRect();
443
444 private:
445 QBrush mBrush;
446 QPen mPen;
447 QPen mSecondaryPen;
448
450 double mIconSize = 5;
451
453 IconType mIconType = ICON_CIRCLE;
454 std::unique_ptr<QSvgRenderer> mSvgRenderer;
455 QPoint mSvgOffset;
456
457 std::unique_ptr<QgsSymbol> mSymbol;
458
462 QVector<QVector<QVector<QgsPointXY>>> mPoints;
464 double mTranslationOffsetX = 0.0;
465 double mTranslationOffsetY = 0.0;
466
468};
469
470#endif
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
Definition qgis.h:337
@ Polygon
Polygons.
This class represents a coordinate reference system (CRS).
A geometry is the spatial representation of a feature.
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
A class to represent a 2D point.
Definition qgspointxy.h:60
A class for drawing transient features (e.g.
~QgsRubberBand() override
double iconSize() const
Returns the current icon size of the point icons.
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.
@ ICON_CROSS
A cross is used to highlight points (+)
@ 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 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: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_TRANSFER
Definition qgis_sip.h:36
#define SIP_END
Definition qgis_sip.h:208
const QgsCoordinateReferenceSystem & crs