Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Don't use @map_geometry, just change $geometry to desired units
for simplicity of use

If we need access to the original feature geometry in future
this could be addressed by a new @original_geometry variable.
  • Loading branch information
nyalldawson committed Sep 20, 2021
1 parent d47dc4b commit 950547b
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions src/core/symbology/qgsgeometrygeneratorsymbollayer.cpp
Expand Up @@ -18,6 +18,7 @@
#include "qgsmarkersymbol.h"
#include "qgslinesymbol.h"
#include "qgsfillsymbol.h"
#include "qgsexpressioncontextutils.h"

QgsGeometryGeneratorSymbolLayer::~QgsGeometryGeneratorSymbolLayer() = default;

Expand Down Expand Up @@ -248,8 +249,9 @@ void QgsGeometryGeneratorSymbolLayer::render( QgsSymbolRenderContext &context )
case QgsUnitTypes::RenderPoints:
case QgsUnitTypes::RenderInches:
{
// add a new scope for the transformed geometry
QgsExpressionContextScope *generatorScope = new QgsExpressionContextScope();
expressionContext.appendScope( generatorScope );
QgsExpressionContextScopePopper popper( expressionContext, generatorScope );

QgsGeometry transformed = f.geometry();
transformed.transform( context.renderContext().coordinateTransform() );
Expand All @@ -259,20 +261,17 @@ void QgsGeometryGeneratorSymbolLayer::render( QgsSymbolRenderContext &context )
const double scale = 1 / context.renderContext().convertToPainterUnits( 1, mUnits );
mapToPixel.scale( scale, scale );

if ( mExpression->referencedVariables().contains( QStringLiteral( "map_geometry" ) ) )
{
transformed.transform( mapToPixel );
generatorScope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "map_geometry" ), transformed ) );
}
transformed.transform( mapToPixel );
f.setGeometry( transformed );
generatorScope->setFeature( f );

QgsGeometry geom = mExpression->evaluate( &expressionContext ).value<QgsGeometry>();

// transform geometry back from screen units to layer crs
geom.transform( mapToPixel.inverted() );
geom.transform( context.renderContext().coordinateTransform(), QgsCoordinateTransform::ReverseTransform );

f.setGeometry( geom );

delete expressionContext.popScope();
break;
}
}
Expand Down

0 comments on commit 950547b

Please sign in to comment.