QGIS API Documentation  3.25.0-Master (dec16ba68b)
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 
23 class QgsFillSymbol;
24 class QgsLineSymbol;
25 class 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  QgsMapUnitScale mapUnitScale() const override;
65 
66  QgsSymbolLayer *clone() const override SIP_FACTORY;
67 
68  QVariantMap properties() const override;
69 
70  void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
71 
75  void setGeometryExpression( const QString &exp );
76 
80  QString geometryExpression() const { return mExpression->expression(); }
81 
91  QgsUnitTypes::RenderUnit units() const { return mUnits; }
92 
102  void setUnits( QgsUnitTypes::RenderUnit units ) { mUnits = units;}
103 
104  QgsSymbol *subSymbol() override { return mSymbol; }
105 
106  bool setSubSymbol( QgsSymbol *symbol SIP_TRANSFER ) override;
107 
108  QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
109  bool hasDataDefinedProperties() const override;
110 
116  bool isCompatibleWithSymbol( QgsSymbol *symbol ) const override;
117 
130  void render( QgsSymbolRenderContext &context, QgsWkbTypes::GeometryType geometryType = QgsWkbTypes::GeometryType::UnknownGeometry, const QPolygonF *points = nullptr, const QVector<QPolygonF> *rings = nullptr );
131 
132  void setColor( const QColor &color ) override;
133 
134  private:
135  QgsGeometryGeneratorSymbolLayer( const QString &expression );
136 
137 #ifdef SIP_RUN
139 #endif
140 
144  QgsGeometry evaluateGeometryInPainterUnits( const QgsGeometry &input, const QgsFeature &feature, const QgsRenderContext &renderContext, QgsExpressionContext &expressionContext ) const;
145 
150  QgsGeometry coerceToExpectedType( const QgsGeometry &geometry ) const;
151 
152  std::unique_ptr<QgsExpression> mExpression;
153  std::unique_ptr<QgsFillSymbol> mFillSymbol;
154  std::unique_ptr<QgsLineSymbol> mLineSymbol;
155  std::unique_ptr<QgsMarkerSymbol> mMarkerSymbol;
156  QgsSymbol *mSymbol = nullptr;
157 
161  Qgis::SymbolType mSymbolType;
162 
164 
165  bool mRenderingFeature = false;
166  bool mHasRenderedFeature = false;
167 };
168 
169 #endif // QGSGEOMETRYGENERATORSYMBOLLAYER_H
SymbolType
Symbol types.
Definition: qgis.h:205
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.
void setUnits(QgsUnitTypes::RenderUnit units)
Sets the units for the geometry expression.
QgsUnitTypes::RenderUnit units() const
Returns the unit for the geometry expression.
QgsSymbol * subSymbol() override
Returns the symbol's sub symbol, if present.
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:125
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 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 QgsSymbolLayer * clone() const =0
Shall be reimplemented by subclasses to create a deep copy of the instance.
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
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