65 void QgsHighlight::init()
96 mPen.setColor( color );
97 QColor
fillColor( color.red(), color.green(), color.blue(), 63 );
99 mBrush.setStyle( Qt::SolidPattern );
105 mBrush.setColor( fillColor );
106 mBrush.setStyle( Qt::SolidPattern );
111 std::unique_ptr<QgsFeatureRenderer> renderer;
119 Q_FOREACH (
QgsSymbol *symbol, renderer->symbols( context ) )
121 if ( !symbol )
continue;
122 setSymbol( symbol, context,
color, fillColor );
130 if ( !symbol )
return;
136 if ( !symbolLayer )
continue;
178 width = std::max(
width + 2 * mBuffer * scale, mMinWidth * scale );
185 mPen.setWidth( width );
188 void QgsHighlight::paintPoint( QPainter *p,
const QgsPointXY &point )
202 void QgsHighlight::paintLine( QPainter *p,
QgsPolylineXY line )
204 QPolygonF polygon( line.size() );
206 for (
int i = 0; i < line.size(); i++ )
211 p->drawPolyline( polygon );
214 void QgsHighlight::paintPolygon( QPainter *p,
const QgsPolygonXY &polygon )
220 p->setBrush( mBrush );
222 for (
const auto &sourceRing : polygon )
224 if ( sourceRing.empty() )
228 ring.reserve( sourceRing.size() + 1 );
231 for (
const auto &sourceVertex : sourceRing )
235 if ( ring.isEmpty() || std::abs( ring.back().x() - curVertex.x() ) > 1 || std::abs( ring.back().y() - curVertex.y() ) > 1 )
237 ring.push_back( curVertex );
239 lastVertex = curVertex;
242 ring.push_back( ring.at( 0 ) );
244 path.addPolygon( ring );
260 p->setBrush( mBrush );
262 switch ( mGeometry->
type() )
268 paintPoint( p, mGeometry->
asPoint() );
273 for (
int i = 0; i < m.size(); i++ )
275 paintPoint( p, m[i] );
291 for (
int i = 0; i < m.size(); i++ )
293 paintLine( p, m[i] );
303 paintPolygon( p, mGeometry->
asPolygon() );
308 for (
int i = 0; i < m.size(); i++ )
310 paintPolygon( p, m[i] );
334 QColor tmpColor( 255, 0, 0, 255 );
335 QColor tmpFillColor( 0, 255, 0, 255 );
337 std::unique_ptr< QgsFeatureRenderer > renderer = createRenderer( context, tmpColor, tmpFillColor );
338 if ( layer && renderer )
342 QImage image = QImage( imageSize.width(), imageSize.height(), QImage::Format_ARGB32 );
344 QPainter imagePainter( &image );
345 imagePainter.setRenderHint( QPainter::Antialiasing,
true );
349 renderer->startRender( context, layer->
fields() );
351 renderer->renderFeature( mFeature, context );
352 renderer->stopRender( context );
357 int penRed = mPen.color().red();
358 int penGreen = mPen.color().green();
359 int penBlue = mPen.color().blue();
361 double k = ( 255. - mBrush.color().alpha() ) / 255.;
362 QRgb *line =
nullptr;
363 for (
int r = 0; r < image.height(); r++ )
365 line =
reinterpret_cast<QRgb *
>( image.scanLine( r ) );
366 for (
int c = 0;
c < image.width();
c++ )
368 int alpha = qAlpha( line[
c] );
371 int green = qGreen( line[c] );
372 line[
c] = qRgba( penRed, penGreen, penBlue, qBound<int>( 0, alpha - ( green * k ), 255 ) );
377 p->drawImage( 0, 0, image );
398 setVisible( mGeometry );
413 QgsRectangle rect( topLeft.
x(), topLeft.
y(), topLeft.
x() + imageSize.width()*res, topLeft.
y() - imageSize.height()*res );
QgsUnitTypes::RenderUnit widthUnit() const
Returns the units for the line's width.
A rectangle specified with double values.
Base class for all map layer types.
QgsHighlight(QgsMapCanvas *mapCanvas, const QgsGeometry &geom, QgsMapLayer *layer)
Constructor for QgsHighlight.
bool isEmpty() const
Returns true if the rectangle is empty.
void updatePosition() override
called on changed extent or resize event to update position of the item
bool isNull() const
Returns true if the geometry is null (ie, contains no underlying geometry accessible via geometry() )...
Abstract base class for all rendered symbols.
OperationResult transform(const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection direction=QgsCoordinateTransform::ForwardTransform, bool transformZ=false) SIP_THROW(QgsCsException)
Transforms this geometry as described by the coordinate transform ct.
virtual QgsSymbol * subSymbol()
Returns the symbol's sub symbol, if present.
void setXMaximum(double x)
Set the maximum x value.
Simple marker symbol layer, consisting of a rendered shape with solid fill color and an stroke...
virtual void setWidth(double width)
double yMaximum() const
Returns the y maximum value (top side of rectangle).
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
int symbolLayerCount() const
Returns the total number of symbol layers contained in the symbol.
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale()) const
Converts a size from the specified units to painter units (pixels).
A class to represent a 2D point.
void setFillColor(const QColor &fillColor)
Fill color for the highlight.
QVector< QgsPolylineXY > QgsPolygonXY
Polygon: first item of the list is outer ring, inner rings (if any) start from second item...
An abstract class for items that can be placed on the map canvas.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
void setStrokeWidth(double w)
Sets the width of the marker's stroke.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
A geometry is the spatial representation of a feature.
const QgsMapToPixel & mapToPixel() const
QVector< QgsPointXY > QgsMultiPointXY
A collection of QgsPoints that share a common collection of attributes.
QgsPointXY asPoint() const
Returns the contents of the geometry as a 2-dimensional point.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
QgsCoordinateTransform layerTransform(const QgsMapLayer *layer) const
Returns the coordinate transform from layer's CRS to destination CRS.
QgsRectangle rect() const
returns canvas item rectangle in map units
double strokeWidth() const
Map canvas is a class for displaying all GIS data types on a canvas.
QVector< QgsPolygonXY > QgsMultiPolygonXY
A collection of QgsPolygons that share a common collection of attributes.
void setStrokeWidth(double strokeWidth)
The QgsMapSettings class contains configuration for rendering of the map.
QgsMultiPolygonXY asMultiPolygon() const
Returns contents of the geometry as a multi polygon if wkbType is WKBMultiPolygon, otherwise an empty list.
virtual void setColor(const QColor &color)
The fill color.
QVector< QgsPolylineXY > QgsMultiPolylineXY
A collection of QgsPolylines that share a common collection of attributes.
QColor color() const
Returns the line/stroke color.
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
Perform transforms between map coordinates and device coordinates.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
QSize outputSize() const
Returns the size of the resulting map image.
double xMaximum() const
Returns the x maximum value (right side of rectangle).
QgsUnitTypes::RenderUnit strokeWidthUnit() const
Returns the unit for the width of the marker's stroke.
void setYMinimum(double y)
Set the minimum y value.
void updateRect()
recalculates needed rectangle
QgsPolylineXY asPolyline() const
Returns the contents of the geometry as a polyline.
void setRect(const QgsRectangle &r, bool resetRotation=true)
sets canvas item rectangle in map units
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
double mapUnitsPerPixel() const
Returns current map units per pixel.
QgsFeatureRenderer * renderer()
Returns renderer.
QgsMultiPolylineXY asMultiPolyline() const
Returns contents of the geometry as a multi linestring if wkbType is WKBMultiLineString, otherwise an empty list.
QgsPointXY toMapCoordinates(int x, int y) const
Transform device coordinates to map (world) coordinates.
A store for object properties.
QgsSymbolLayer * symbolLayer(int layer)
Returns a specific symbol layer contained in the symbol.
double strokeWidth() const
Returns the width of the marker's stroke.
virtual void setStrokeColor(const QColor &color)
Set stroke color.
A class to represent a vector.
QgsExpressionContext & expressionContext()
Gets the expression context.
int width() const
Returns the stroke width.
virtual double width() const
Returns the estimated width for the line symbol layer.
QgsUnitTypes::RenderUnit outputUnit() const override
Returns the units to use for sizes and widths within the symbol layer.
QVector< QgsPointXY > QgsPolylineXY
Polyline as represented as a vector of two-dimensional points.
Contains information about the context of a rendering operation.
virtual void setFillColor(const QColor &color)
Set fill color.
void setColor(const QColor &color)
Set line/stroke to color, polygon fill to color with alpha = 63.
void setYMaximum(double y)
Set the maximum y value.
static QgsRenderContext fromMapSettings(const QgsMapSettings &mapSettings)
create initialized QgsRenderContext instance from given QgsMapSettings
QgsMapCanvas * mMapCanvas
pointer to map canvas
bool isMultipart() const
Returns true if WKB of the geometry is of WKBMulti* type.
void paint(QPainter *p) override
function to be implemented by derived classes
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
bool hasGeometry() const
Returns true if the feature has an associated geometry.
QgsMultiPointXY asMultiPoint() const
Returns contents of the geometry as a multi point if wkbType is WKBMultiPoint, otherwise an empty lis...
QgsMapLayer * layer() const
Returns the layer for which this highlight has been created.
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
double width() const
Returns the width of the rectangle.
QColor fillColor() const
Returns the fill color.
QPointF toCanvasCoordinates(const QgsPointXY &point) const
transformation from map coordinates to screen coordinates
Represents a vector layer which manages a vector based data sets.
QgsWkbTypes::GeometryType type() const
Returns type of the geometry as a QgsWkbTypes::GeometryType.
double xMinimum() const
Returns the x minimum value (left side of rectangle).
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
void setXMinimum(double x)
Set the minimum x value.
RenderUnit
Rendering size units.
virtual void setDataDefinedProperty(Property key, const QgsProperty &property)
Sets a data defined property for the layer.
void setWidth(int width)
Set stroke width.
QgsPolygonXY asPolygon() const
Returns the contents of the geometry as a polygon.