QGIS API Documentation 3.29.0-Master (006c3c0232)
qgsgeometrygeneratorsymbollayer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsgeometrygeneratorsymbollayer.h
3 ---------------------
4 begin : November 2015
5 copyright : (C) 2015 by Matthias Kuhn
6 email : matthias at opengis dot ch
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
16#ifndef QGSGEOMETRYGENERATORSYMBOLLAYER_H
17#define QGSGEOMETRYGENERATORSYMBOLLAYER_H
18
19#include "qgis_core.h"
20#include "qgis.h"
21#include "qgssymbollayer.h"
22
23class QgsFillSymbol;
24class QgsLineSymbol;
25class QgsMarkerSymbol;
26
32{
33 public:
35
37 static QgsSymbolLayer *create( const QVariantMap &properties ) SIP_FACTORY;
38
39 QString layerType() const override;
40
47 void setSymbolType( Qgis::SymbolType symbolType );
48
55 Qgis::SymbolType symbolType() const { return mSymbolType; }
56
57 void startRender( QgsSymbolRenderContext &context ) override;
58 void stopRender( QgsSymbolRenderContext &context ) override;
59 void startFeatureRender( const QgsFeature &feature, QgsRenderContext &context ) override;
60 void stopFeatureRender( const QgsFeature &feature, QgsRenderContext &context ) override;
61 bool usesMapUnits() const override;
62 QColor color() const override;
63 QgsUnitTypes::RenderUnit outputUnit() const override;
64 void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
65 QgsMapUnitScale mapUnitScale() const override;
66
67 QgsSymbolLayer *clone() const override SIP_FACTORY;
68
69 QVariantMap properties() const override;
70
71 void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
72
76 void setGeometryExpression( const QString &exp );
77
81 QString geometryExpression() const;
82
92 QgsUnitTypes::RenderUnit units() const { return mUnits; }
93
103 void setUnits( QgsUnitTypes::RenderUnit units ) { mUnits = units;}
104
105 QgsSymbol *subSymbol() override { return mSymbol; }
106
107 bool setSubSymbol( QgsSymbol *symbol SIP_TRANSFER ) override;
108
109 QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
110 bool hasDataDefinedProperties() const override;
111
117 bool isCompatibleWithSymbol( QgsSymbol *symbol ) const override;
118
131 void render( QgsSymbolRenderContext &context, QgsWkbTypes::GeometryType geometryType = QgsWkbTypes::GeometryType::UnknownGeometry, const QPolygonF *points = nullptr, const QVector<QPolygonF> *rings = nullptr );
132
133 void setColor( const QColor &color ) override;
134
135 private:
136 QgsGeometryGeneratorSymbolLayer( const QString &expression );
137
138#ifdef SIP_RUN
140#endif
141
145 QgsGeometry evaluateGeometryInPainterUnits( const QgsGeometry &input, const QgsFeature &feature, const QgsRenderContext &renderContext, QgsExpressionContext &expressionContext ) const;
146
151 QgsGeometry coerceToExpectedType( const QgsGeometry &geometry ) const;
152
153 std::unique_ptr<QgsExpression> mExpression;
154 std::unique_ptr<QgsFillSymbol> mFillSymbol;
155 std::unique_ptr<QgsLineSymbol> mLineSymbol;
156 std::unique_ptr<QgsMarkerSymbol> mMarkerSymbol;
157 QgsSymbol *mSymbol = nullptr;
158
162 Qgis::SymbolType mSymbolType;
163
165
166 bool mRenderingFeature = false;
167 bool mHasRenderedFeature = false;
168};
169
170#endif // QGSGEOMETRYGENERATORSYMBOLLAYER_H
SymbolType
Symbol types.
Definition: qgis.h:206
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
Definition: qgsfillsymbol.h:30
Qgis::SymbolType symbolType() const
Access the symbol type.
QgsSymbol * subSymbol() override
Returns the symbol's sub symbol, if present.
void setUnits(QgsUnitTypes::RenderUnit units)
Sets the units for the geometry expression.
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:164
A line symbol type, for rendering LineString and MultiLineString geometries.
Definition: qgslinesymbol.h:30
Struct for storing maximum and minimum scales for measurements in map units.
A marker symbol type, for rendering Point and MultiPoint geometries.
Contains information about the context of a rendering operation.
virtual void setOutputUnit(QgsUnitTypes::RenderUnit unit)
Sets the units to use for sizes and widths within the symbol layer.
virtual QgsSymbolLayer * clone() const =0
Shall be reimplemented by subclasses to create a deep copy of the instance.
virtual bool setSubSymbol(QgsSymbol *symbol)
Sets layer's subsymbol. takes ownership of the passed symbol.
virtual void startFeatureRender(const QgsFeature &feature, QgsRenderContext &context)
Called before the layer will be rendered for a particular feature.
virtual QgsMapUnitScale mapUnitScale() const
virtual QSet< QString > usedAttributes(const QgsRenderContext &context) const
Returns the set of attributes referenced by the layer.
virtual void startRender(QgsSymbolRenderContext &context)=0
Called before a set of rendering operations commences on the supplied render context.
virtual QString layerType() const =0
Returns a string that represents this layer type.
virtual void stopRender(QgsSymbolRenderContext &context)=0
Called after a set of rendering operations has finished on the supplied render context.
virtual QgsUnitTypes::RenderUnit outputUnit() const
Returns the units to use for sizes and widths within the symbol layer.
virtual bool isCompatibleWithSymbol(QgsSymbol *symbol) const
Returns if the layer can be used below the specified symbol.
virtual void setColor(const QColor &color)
Sets the "representative" color for the symbol layer.
virtual QColor color() const
Returns the "representative" color of the symbol layer.
virtual void stopFeatureRender(const QgsFeature &feature, QgsRenderContext &context)
Called after the layer has been rendered for a particular feature.
virtual bool usesMapUnits() const
Returns true if the symbol layer has any components which use map unit based sizes.
virtual bool hasDataDefinedProperties() const
Returns true if the symbol layer (or any of its sub-symbols) contains data defined properties.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:93
Helper functions for various unit types.
Definition: qgsunittypes.h:39
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:168
@ RenderMapUnits
Map units.
Definition: qgsunittypes.h:170
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
Definition: qgswkbtypes.h:141
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_FACTORY
Definition: qgis_sip.h:76