66 void QgsHighlight::init()
97 mPen.setColor( color );
98 QColor
fillColor( color.red(), color.green(), color.blue(), 63 );
100 mBrush.setStyle( Qt::SolidPattern );
106 mBrush.setColor( fillColor );
107 mBrush.setStyle( Qt::SolidPattern );
112 std::unique_ptr<QgsFeatureRenderer> renderer;
120 Q_FOREACH (
QgsSymbol *symbol, renderer->symbols( context ) )
122 if ( !symbol )
continue;
123 setSymbol( symbol, context,
color, fillColor );
131 if ( !symbol )
return;
137 if ( !symbolLayer )
continue;
179 width = std::max(
width + 2 * mBuffer * scale, mMinWidth * scale );
186 mPen.setWidth( width );
189 void QgsHighlight::paintPoint( QPainter *p,
const QgsPointXY &point )
203 void QgsHighlight::paintLine( QPainter *p,
QgsPolylineXY line )
205 QPolygonF polygon( line.size() );
207 for (
int i = 0; i < line.size(); i++ )
212 p->drawPolyline( polygon );
215 void QgsHighlight::paintPolygon( QPainter *p,
const QgsPolygonXY &polygon )
221 p->setBrush( mBrush );
223 for (
const auto &sourceRing : polygon )
225 if ( sourceRing.empty() )
229 ring.reserve( sourceRing.size() + 1 );
232 for (
const auto &sourceVertex : sourceRing )
236 if ( ring.isEmpty() || std::abs( ring.back().x() - curVertex.x() ) > 1 || std::abs( ring.back().y() - curVertex.y() ) > 1 )
238 ring.push_back( curVertex );
240 lastVertex = curVertex;
243 ring.push_back( ring.at( 0 ) );
245 path.addPolygon( ring );
261 p->setBrush( mBrush );
263 switch ( mGeometry->
type() )
269 paintPoint( p, mGeometry->
asPoint() );
274 for (
int i = 0; i < m.size(); i++ )
276 paintPoint( p, m[i] );
292 for (
int i = 0; i < m.size(); i++ )
294 paintLine( p, m[i] );
304 paintPolygon( p, mGeometry->
asPolygon() );
309 for (
int i = 0; i < m.size(); i++ )
311 paintPolygon( p, m[i] );
335 QColor tmpColor( 255, 0, 0, 255 );
336 QColor tmpFillColor( 0, 255, 0, 255 );
338 std::unique_ptr< QgsFeatureRenderer > renderer = createRenderer( context, tmpColor, tmpFillColor );
339 if ( layer && renderer )
343 QImage image = QImage( imageSize.width(), imageSize.height(), QImage::Format_ARGB32 );
345 QPainter imagePainter( &image );
346 imagePainter.setRenderHint( QPainter::Antialiasing,
true );
350 renderer->startRender( context, layer->
fields() );
352 renderer->renderFeature( mFeature, context );
353 renderer->stopRender( context );
358 int penRed = mPen.color().red();
359 int penGreen = mPen.color().green();
360 int penBlue = mPen.color().blue();
362 double k = ( 255. - mBrush.color().alpha() ) / 255.;
363 QRgb *line =
nullptr;
364 for (
int r = 0; r < image.height(); r++ )
366 line =
reinterpret_cast<QRgb *
>( image.scanLine( r ) );
367 for (
int c = 0;
c < image.width();
c++ )
369 int alpha = qAlpha( line[
c] );
372 int green = qGreen( line[c] );
373 line[
c] = qRgba( penRed, penGreen, penBlue, qBound<int>( 0, alpha - ( green * k ), 255 ) );
378 p->drawImage( 0, 0, image );
399 setVisible( mGeometry );
414 QgsRectangle rect( topLeft.
x(), topLeft.
y(), topLeft.
x() + imageSize.width()*res, topLeft.
y() - imageSize.height()*res );
A rectangle specified with double values.
Base class for all map layer types.
QgsMapLayer * layer() const
Returns the layer for which this highlight has been created.
QgsHighlight(QgsMapCanvas *mapCanvas, const QgsGeometry &geom, QgsMapLayer *layer)
Constructor for QgsHighlight.
void updatePosition() override
called on changed extent or resize event to update position of the item
QgsRectangle rect() const
returns canvas item rectangle in map units
bool isMultipart() const
Returns true if WKB of the geometry is of WKBMulti* type.
QColor color() const
Returns the line/stroke color.
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)
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
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.
void setStrokeWidth(double w)
Sets the width of the marker's stroke.
A geometry is the spatial representation of a feature.
int symbolLayerCount() const
Returns the total number of symbol layers contained in the symbol.
QVector< QgsPointXY > QgsMultiPointXY
A collection of QgsPoints that share a common collection of attributes.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
bool hasGeometry() const
Returns true if the feature has an associated geometry.
Map canvas is a class for displaying all GIS data types on a canvas.
virtual double width() const
Returns the estimated width for the line symbol layer.
QVector< QgsPolygonXY > QgsMultiPolygonXY
A collection of QgsPolygons that share a common collection of attributes.
void setStrokeWidth(double strokeWidth)
double strokeWidth() const
Returns the width of the marker's stroke.
The QgsMapSettings class contains configuration for rendering of the map.
virtual void setColor(const QColor &color)
The fill color.
QVector< QgsPolylineXY > QgsMultiPolylineXY
A collection of QgsPolylines that share a common collection of attributes.
QgsMultiPolylineXY asMultiPolyline() const
Returns the contents of the geometry as a multi-linestring.
QgsCoordinateTransform layerTransform(const QgsMapLayer *layer) const
Returns the coordinate transform from layer's CRS to destination CRS.
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.
double strokeWidth() const
QgsFields fields() const FINAL
Returns the list of fields of this layer.
QgsUnitTypes::RenderUnit widthUnit() const
Returns the units for the line's width.
bool isEmpty() const
Returns true if the rectangle is empty.
QgsPolygonXY asPolygon() const
Returns the contents of the geometry as a polygon.
double width() const
Returns the width of the rectangle.
void setYMinimum(double y)
Set the minimum y value.
void updateRect()
recalculates needed rectangle
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
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.
QColor fillColor() const
Returns the fill color.
QgsFeatureRenderer * renderer()
Returns renderer.
double mapUnitsPerPixel() const
Returns current map units per pixel.
A store for object properties.
QgsSymbolLayer * symbolLayer(int layer)
Returns a specific symbol layer contained in the symbol.
const QgsMapToPixel & mapToPixel() const
virtual void setStrokeColor(const QColor &color)
Set stroke color.
A class to represent a vector.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
QgsExpressionContext & expressionContext()
Gets the expression context.
double xMaximum() const
Returns the x maximum value (right side of rectangle).
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
QgsUnitTypes::RenderUnit outputUnit() const override
Returns the units to use for sizes and widths within the symbol layer.
QgsUnitTypes::RenderUnit strokeWidthUnit() const
Returns the unit for the width of the marker's stroke.
QVector< QgsPointXY > QgsPolylineXY
Polyline as represented as a vector of two-dimensional points.
Contains information about the context of a rendering operation.
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale()) const
Converts a size from the specified units to painter units (pixels).
virtual void setFillColor(const QColor &color)
Set fill color.
QgsPointXY asPoint() const
Returns the contents of the geometry as a 2-dimensional point.
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
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
void paint(QPainter *p) override
function to be implemented by derived classes
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
double xMinimum() const
Returns the x minimum value (left side of rectangle).
double yMaximum() const
Returns the y maximum value (top side of rectangle).
QgsPolylineXY asPolyline() const
Returns the contents of the geometry as a polyline.
QgsMultiPointXY asMultiPoint() const
Returns the contents of the geometry as a multi-point.
QgsWkbTypes::GeometryType type
int width() const
Returns the stroke width.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
QPointF toCanvasCoordinates(const QgsPointXY &point) const
transformation from map coordinates to screen coordinates
Represents a vector layer which manages a vector based data sets.
QgsMultiPolygonXY asMultiPolygon() const
Returns the contents of the geometry as a multi-polygon.
QSize outputSize() const
Returns the size of the resulting map image.
QgsPointXY toMapCoordinates(int x, int y) const
Transform device coordinates to map (world) coordinates.
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.