26 mIconSize( 5 ), mIconType( ICON_BOX ), mGeometryType( geomType )
28 mPen = QPen( QColor( 255, 0, 0 ) );
29 mBrush = QBrush( QColor( 255, 0, 0 ) );
38 if ( !mGeometry || !painter )
44 painter->translate( -pos() );
48 painter->setBrush( mBrush );
52 painter->setBrush( Qt::NoBrush );
54 painter->setPen( mPen );
57 std::unique_ptr< QgsAbstractGeometry > paintGeom( mGeometry->clone() );
60 paintGeom->draw( *painter );
68 while ( paintGeom->nextVertex( vertexId, vertex ) )
70 drawVertex( painter, vertex.
x(), vertex.
y() );
84 void QgsGeometryRubberBand::drawVertex( QPainter *p,
double x,
double y )
86 const qreal s = ( mIconSize - 1 ) / 2.0;
94 p->drawLine( QLineF( x - s, y, x + s, y ) );
95 p->drawLine( QLineF( x, y - s, x, y + s ) );
99 p->drawLine( QLineF( x - s, y - s, x + s, y + s ) );
100 p->drawLine( QLineF( x - s, y + s, x + s, y - s ) );
104 p->drawLine( QLineF( x - s, y - s, x + s, y - s ) );
105 p->drawLine( QLineF( x + s, y - s, x + s, y + s ) );
106 p->drawLine( QLineF( x + s, y + s, x - s, y + s ) );
107 p->drawLine( QLineF( x - s, y + s, x - s, y - s ) );
111 p->drawRect( x - s, y - s, mIconSize, mIconSize );
115 p->drawEllipse( x - s, y - s, mIconSize, mIconSize );
122 mGeometry.reset( geom );
126 setRect( rubberBandRectangle() );
134 mGeometry->moveVertex(
id, newPos );
135 setRect( rubberBandRectangle() );
141 mBrush.setColor(
c );
151 mPen.setWidth( width );
156 mPen.setStyle( penStyle );
161 mBrush.setStyle( brushStyle );
166 mDrawVertices = isVerticesDrawn;
169 QgsRectangle QgsGeometryRubberBand::rubberBandRectangle()
const
172 const qreal s = ( mIconSize - 1 ) / 2.0 * scale;
173 const qreal p = mPen.width() * scale;
174 return mGeometry->boundingBox().buffered( s + p );
Abstract base class for all geometries.
void setStrokeColor(const QColor &c)
Sets stroke color for vertex markers.
~QgsGeometryRubberBand() override
@ ICON_X
A cross is used to highlight points (x)
@ ICON_NONE
No icon is used.
@ ICON_FULL_BOX
A full box is used to highlight points (■)
@ ICON_CIRCLE
A circle is used to highlight points (○)
@ ICON_BOX
A box is used to highlight points (□)
@ ICON_CROSS
A cross is used to highlight points (+)
QgsWkbTypes::GeometryType geometryType() const
Returns which geometry is handled by the rubber band, polygon or line.
void setBrushStyle(Qt::BrushStyle brushStyle)
Sets brush style.
void setGeometryType(const QgsWkbTypes::GeometryType &geometryType)
Sets which geometry is handled by the rubber band, polygon or line.
void setLineStyle(Qt::PenStyle penStyle)
Sets pen style.
virtual void setGeometry(QgsAbstractGeometry *geom)
Sets geometry (takes ownership). Geometry is expected to be in map coordinates.
void paint(QPainter *painter) override
function to be implemented by derived classes
void moveVertex(QgsVertexId id, const QgsPoint &newPos)
Moves vertex to new position (in map coordinates)
void setStrokeWidth(int width)
Sets stroke width.
void setVertexDrawingEnabled(bool isVerticesDrawn)
Sets whether the vertices are drawn.
QgsGeometryRubberBand(QgsMapCanvas *mapCanvas, QgsWkbTypes::GeometryType geomType=QgsWkbTypes::LineGeometry)
void setFillColor(const QColor &c)
Sets fill color for vertex markers.
An abstract class for items that can be placed on the map canvas.
QgsMapCanvas * mMapCanvas
pointer to map canvas
void setRect(const QgsRectangle &r, bool resetRotation=true)
sets canvas item rectangle in map units
Map canvas is a class for displaying all GIS data types on a canvas.
double mapUnitsPerPixel() const
Returns the mapUnitsPerPixel (map units per pixel) for the canvas.
const QgsMapToPixel * getCoordinateTransform()
Gets the current coordinate transform.
QgsPointXY transform(const QgsPointXY &p) const
Transforms a point p from map (world) coordinates to device coordinates.
Point geometry type, with support for z-dimension and m-values.
A rectangle specified with double values.
Scoped object for saving and restoring a QPainter object's state.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
Utility class for identifying a unique vertex within a geometry.