31   QString expression = 
properties.value( QStringLiteral( 
"geometryModifier" ) ).toString();
 
   32   if ( expression.isEmpty() )
 
   34     expression = QStringLiteral( 
"$geometry" );
 
   38   if ( 
properties.value( QStringLiteral( 
"SymbolType" ) ) == QLatin1String( 
"Marker" ) )
 
   42   else if ( 
properties.value( QStringLiteral( 
"SymbolType" ) ) == QLatin1String( 
"Line" ) )
 
   57 QgsGeometryGeneratorSymbolLayer::QgsGeometryGeneratorSymbolLayer( 
const QString &expression )
 
   60   , mSymbolType( 
Qgis::SymbolType::Marker )
 
   67   return QStringLiteral( 
"GeometryGenerator" );
 
   76     mSymbol = mFillSymbol.get();
 
   82     mSymbol = mLineSymbol.get();
 
   88     mSymbol = mMarkerSymbol.get();
 
  114   mRenderingFeature = 
true;
 
  115   mHasRenderedFeature = 
false;
 
  120   mRenderingFeature = 
false;
 
  126     return mFillSymbol->usesMapUnits();
 
  127   else if ( mLineSymbol )
 
  128     return mLineSymbol->usesMapUnits();
 
  129   else if ( mMarkerSymbol )
 
  130     return mMarkerSymbol->usesMapUnits();
 
  137     return mFillSymbol->color();
 
  138   else if ( mLineSymbol )
 
  139     return mLineSymbol->color();
 
  140   else if ( mMarkerSymbol )
 
  141     return mMarkerSymbol->color();
 
  148     return mFillSymbol->outputUnit();
 
  149   else if ( mLineSymbol )
 
  150     return mLineSymbol->outputUnit();
 
  151   else if ( mMarkerSymbol )
 
  152     return mMarkerSymbol->outputUnit();
 
  159     return mFillSymbol->mapUnitScale();
 
  160   else if ( mLineSymbol )
 
  161     return mLineSymbol->mapUnitScale();
 
  162   else if ( mMarkerSymbol )
 
  163     return mMarkerSymbol->mapUnitScale();
 
  172     clone->mFillSymbol.reset( mFillSymbol->clone() );
 
  174     clone->mLineSymbol.reset( mLineSymbol->clone() );
 
  176     clone->mMarkerSymbol.reset( mMarkerSymbol->clone() );
 
  178   clone->setSymbolType( mSymbolType );
 
  179   clone->setUnits( mUnits );
 
  190   props.insert( QStringLiteral( 
"geometryModifier" ), mExpression->expression() );
 
  191   switch ( mSymbolType )
 
  194       props.insert( QStringLiteral( 
"SymbolType" ), QStringLiteral( 
"Marker" ) );
 
  197       props.insert( QStringLiteral( 
"SymbolType" ), QStringLiteral( 
"Line" ) );
 
  200       props.insert( QStringLiteral( 
"SymbolType" ), QStringLiteral( 
"Fill" ) );
 
  219     if ( patchShapeGeometry.
isEmpty() )
 
  235           originalSymbolType = mSymbol->
type();
 
  264   switch ( symbol->
type() )
 
  291          + mExpression->referencedColumns();
 
  313   const QTransform painterToTargetUnits = QTransform::fromScale( scale, scale );
 
  314   drawGeometry.transform( painterToTargetUnits );
 
  318   f.setGeometry( drawGeometry );
 
  327   geom.
transform( painterToTargetUnits.inverted( ) );
 
  334   switch ( mSymbolType )
 
  340         if ( !geoms.empty() )
 
  341           return geoms.at( 0 );
 
  348         if ( !geoms.empty() )
 
  349           return geoms.at( 0 );
 
  356         if ( !geoms.empty() )
 
  357           return geoms.at( 0 );
 
  368   if ( mRenderingFeature && mHasRenderedFeature )
 
  383     switch ( geometryType )
 
  387         Q_ASSERT( points->size() == 1 );
 
  401         std::unique_ptr< QgsPolygon > polygon = std::make_unique< QgsPolygon >();
 
  402         polygon->setExteriorRing( exterior.release() );
 
  405           for ( 
const QPolygonF &ring : *rings )
 
  410         drawGeometry = 
QgsGeometry( std::move( polygon ) );
 
  426     result.
transform( mapToPixel.inverted() );
 
  434       QgsDebugMsg( QStringLiteral( 
"Could no transform generated geometry to layer CRS" ) );
 
  469         result.
transform( mapToPixel.inverted() );
 
  477           QgsDebugMsg( QStringLiteral( 
"Could no transform generated geometry to layer CRS" ) );
 
  487   subSymbolExpressionContextScope->
setFeature( f );
 
  496   if ( mRenderingFeature )
 
  497     mHasRenderedFeature = 
true;
 
The Qgis class provides global constants for use throughout the application.
@ RenderingSubSymbol
Set whenever a sub-symbol of a parent symbol is currently being rendered. Can be used during symbol a...
Custom exception class for Coordinate Reference System related exceptions.
RAII class to pop scope from an expression context on destruction.
Single scope for storing variables and functions for use within a QgsExpressionContext.
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the scope.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QgsFeature feature() const
Convenience function for retrieving the feature for the context, if set.
Class for parsing and evaluation of expressions (formerly called "search strings").
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
static QgsFillSymbol * createSimple(const QVariantMap &properties)
Create a fill symbol with one symbol layer: SimpleFill with specified properties.
bool usesMapUnits() const override
Returns true if the symbol layer has any components which use map unit based sizes.
QgsMapUnitScale mapUnitScale() const override
void render(QgsSymbolRenderContext &context, QgsWkbTypes::GeometryType geometryType=QgsWkbTypes::GeometryType::UnknownGeometry, const QPolygonF *points=nullptr, const QVector< QPolygonF > *rings=nullptr)
Will render this symbol layer using the context.
void drawPreviewIcon(QgsSymbolRenderContext &context, QSize size) override
bool hasDataDefinedProperties() const override
Returns true if the symbol layer (or any of its sub-symbols) contains data defined properties.
void setGeometryExpression(const QString &exp)
Set the expression to generate this geometry.
void setSymbolType(Qgis::SymbolType symbolType)
Set the type of symbol which should be created.
QString layerType() const override
Returns a string that represents this layer type.
bool setSubSymbol(QgsSymbol *symbol) override
Sets layer's subsymbol. takes ownership of the passed symbol.
bool isCompatibleWithSymbol(QgsSymbol *symbol) const override
Will always return true.
Qgis::SymbolType symbolType() const
Access the symbol type.
QVariantMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
void startRender(QgsSymbolRenderContext &context) override
Called before a set of rendering operations commences on the supplied render context.
void setUnits(QgsUnitTypes::RenderUnit units)
Sets the units for the geometry expression.
QSet< QString > usedAttributes(const QgsRenderContext &context) const override
Returns the set of attributes referenced by the layer.
void setColor(const QColor &color) override
The fill color.
QgsUnitTypes::RenderUnit outputUnit() const override
Returns the units to use for sizes and widths within the symbol layer.
~QgsGeometryGeneratorSymbolLayer() override
static QgsSymbolLayer * create(const QVariantMap &properties)
Creates the symbol layer.
void stopFeatureRender(const QgsFeature &feature, QgsRenderContext &context) override
Called after the layer has been rendered for a particular feature.
QgsSymbolLayer * clone() const override
Shall be reimplemented by subclasses to create a deep copy of the instance.
QgsSymbol * subSymbol() override
Returns the symbol's sub symbol, if present.
void stopRender(QgsSymbolRenderContext &context) override
Called after a set of rendering operations has finished on the supplied render context.
QColor color() const override
The fill color.
void startFeatureRender(const QgsFeature &feature, QgsRenderContext &context) override
Called before the layer will be rendered for a particular feature.
A geometry is the spatial representation of a feature.
QVector< QgsGeometry > coerceToType(QgsWkbTypes::Type type) const
Attempts to coerce this geometry into the specified destination type.
Qgis::GeometryOperationResult transform(const QgsCoordinateTransform &ct, Qgis::TransformDirection direction=Qgis::TransformDirection::Forward, bool transformZ=false) SIP_THROW(QgsCsException)
Transforms this geometry as described by the coordinate transform ct.
static QgsGeometry fromPointXY(const QgsPointXY &point) SIP_HOLDGIL
Creates a new geometry from a QgsPointXY object.
QgsWkbTypes::GeometryType type
bool isEmpty() const
Returns true if the geometry is empty (eg a linestring with no vertices, or a collection with no geom...
Represents a patch shape for use in map legends.
QgsGeometry scaledGeometry(QSizeF size) const
Returns the patch shape's geometry, scaled to the given size.
bool isNull() const
Returns true if the patch shape is a null QgsLegendPatchShape, which indicates that the default legen...
void setScaleToOutputSize(bool scale)
Sets whether the patch shape should by resized to the desired target size when rendering.
static QgsLineString * fromQPolygonF(const QPolygonF &polygon)
Returns a new linestring from a QPolygonF polygon input.
A line symbol type, for rendering LineString and MultiLineString geometries.
static QgsLineSymbol * createSimple(const QVariantMap &properties)
Create a line symbol with one symbol layer: SimpleLine with specified properties.
QgsPointXY transform(const QgsPointXY &p) const
Transforms a point p from map (world) coordinates to device coordinates.
Struct for storing maximum and minimum scales for measurements in map units.
A marker symbol type, for rendering Point and MultiPoint geometries.
static QgsMarkerSymbol * createSimple(const QVariantMap &properties)
Create a marker symbol with one symbol layer: SimpleMarker with specified properties.
Contains information about the context of a rendering operation.
QPainter * painter()
Returns the destination QPainter for the render operation.
QgsExpressionContext & expressionContext()
Gets the expression context.
const QgsMapToPixel & mapToPixel() const
Returns the context's map to pixel transform, which transforms between map coordinates and device coo...
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale(), Qgis::RenderSubcomponentProperty property=Qgis::RenderSubcomponentProperty::Generic) const
Converts a size from the specified units to painter units (pixels).
void setFlag(Qgis::RenderContextFlag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected)
QgsCoordinateTransform coordinateTransform() const
Returns the current coordinate transform for the context.
Qgis::RenderContextFlags flags() const
Returns combination of flags used for rendering.
QgsLegendPatchShape defaultPatch(Qgis::SymbolType type, QSizeF size) const
Returns the default legend patch shape for the given symbol type.
static QgsStyle * defaultStyle()
Returns default application-wide style.
virtual QSet< QString > usedAttributes(const QgsRenderContext &context) const
Returns the set of attributes referenced by the layer.
void copyDataDefinedProperties(QgsSymbolLayer *destLayer) const
Copies all data defined properties of this layer to another symbol layer.
void restoreOldDataDefinedProperties(const QVariantMap &stringMap)
Restores older data defined properties from string map.
void copyPaintEffect(QgsSymbolLayer *destLayer) const
Copies paint effect of this layer to another symbol layer.
bool selected() const
Returns true if symbols should be rendered using the selected symbol coloring and style.
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
QgsWkbTypes::GeometryType originalGeometryType() const
Returns the geometry type for the original feature geometry being rendered.
const QgsFeature * feature() const
Returns the current feature being rendered.
QgsExpressionContextScope * expressionContextScope()
This scope is always available when a symbol of this type is being rendered.
const QgsLegendPatchShape * patchShape() const
Returns the symbol patch shape, to use if rendering symbol preview icons.
Abstract base class for all rendered symbols.
QgsSymbolRenderContext * symbolRenderContext()
Returns the symbol render context.
void stopRender(QgsRenderContext &context)
Ends the rendering process.
void drawPreviewIcon(QPainter *painter, QSize size, QgsRenderContext *customContext=nullptr, bool selected=false, const QgsExpressionContext *expressionContext=nullptr, const QgsLegendPatchShape *patchShape=nullptr)
Draws an icon of the symbol that occupies an area given by size using the specified painter.
QSet< QString > usedAttributes(const QgsRenderContext &context) const
Returns a list of attributes required to render this feature.
void setColor(const QColor &color)
Sets the color for the symbol.
void renderFeature(const QgsFeature &feature, QgsRenderContext &context, int layer=-1, bool selected=false, bool drawVertexMarker=false, Qgis::VertexMarkerType currentVertexMarkerType=Qgis::VertexMarkerType::SemiTransparentCircle, double currentVertexMarkerSize=0.0) SIP_THROW(QgsCsException)
Render a feature.
Qgis::SymbolType type() const
Returns the symbol's type.
void startRender(QgsRenderContext &context, const QgsFields &fields=QgsFields())
Begins the rendering process for the symbol.
static Q_INVOKABLE QString encodeUnit(QgsUnitTypes::DistanceUnit unit)
Encodes a distance unit to a string.
static Q_INVOKABLE QgsUnitTypes::RenderUnit decodeRenderUnit(const QString &string, bool *ok=nullptr)
Decodes a render unit from a string.
RenderUnit
Rendering size units.
@ RenderUnknownUnit
Mixed or unknown units.
@ RenderMetersInMapUnits
Meters value as Map units.
@ RenderPercentage
Percentage of another measurement (e.g., canvas size, feature size)
@ RenderPoints
Points (e.g., for font sizes)
@ RenderMillimeters
Millimeters.
@ RenderMapUnits
Map units.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.