From 90dd8a0f4ad8d155755342a54059f605313018da Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Mon, 11 Mar 2019 11:22:23 +0100 Subject: [PATCH] Obstacle geometry should be original geometry --- src/core/qgspallabeling.cpp | 39 +++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/core/qgspallabeling.cpp b/src/core/qgspallabeling.cpp index 48a56af9d48..467c6354528 100644 --- a/src/core/qgspallabeling.cpp +++ b/src/core/qgspallabeling.cpp @@ -1221,29 +1221,11 @@ void QgsPalLayerSettings::calculateLabelSize( const QFontMetricsF *fm, const QSt void QgsPalLayerSettings::registerFeature( const QgsFeature &f, QgsRenderContext &context, QgsLabelFeature **labelFeature, QgsGeometry obstacleGeometry ) { - QgsFeature feature = f; - if ( geometryGeneratorEnabled && drawLabels ) - { - if ( !mGeometryGeneratorExpression.isValid() ) - { - mGeometryGeneratorExpression = QgsExpression( geometryGenerator ); - mGeometryGeneratorExpression.prepare( &context.expressionContext() ); - if ( mGeometryGeneratorExpression.hasParserError() ) - QgsMessageLog::logMessage( QObject::tr( "Labeling" ), mGeometryGeneratorExpression.parserErrorString() ); - } - context.expressionContext().setFeature( feature ); - const QgsGeometry geometry = mGeometryGeneratorExpression.evaluate( &context.expressionContext() ).value(); - if ( mGeometryGeneratorExpression.hasEvalError() ) - QgsMessageLog::logMessage( QObject::tr( "Labeling" ), mGeometryGeneratorExpression.evalErrorString() ); - - feature.setGeometry( geometry ); - } - // either used in QgsPalLabeling (palLayer is set) or in QgsLabelingEngine (labelFeature is set) Q_ASSERT( labelFeature ); QVariant exprVal; // value() is repeatedly nulled on data defined evaluation and replaced when successful - mCurFeat = &feature; + mCurFeat = &f; // data defined is obstacle? calculate this first, to avoid wasting time working with obstacles we don't require bool isObstacle = mDataDefinedProperties.valueAsBool( QgsPalLayerSettings::IsObstacle, context.expressionContext(), obstacle ); // default to layer default @@ -1252,12 +1234,27 @@ void QgsPalLayerSettings::registerFeature( const QgsFeature &f, QgsRenderContext { if ( isObstacle ) { - registerObstacleFeature( feature, context, labelFeature, obstacleGeometry ); + registerObstacleFeature( f, context, labelFeature, obstacleGeometry ); } return; } -// mCurFields = &layer->fields(); + QgsFeature feature = f; + if ( geometryGeneratorEnabled ) + { + if ( !mGeometryGeneratorExpression.isValid() ) + { + mGeometryGeneratorExpression = QgsExpression( geometryGenerator ); + mGeometryGeneratorExpression.prepare( &context.expressionContext() ); + if ( mGeometryGeneratorExpression.hasParserError() ) + QgsMessageLog::logMessage( QObject::tr( "Labeling" ), mGeometryGeneratorExpression.parserErrorString() ); + } + const QgsGeometry geometry = mGeometryGeneratorExpression.evaluate( &context.expressionContext() ).value(); + if ( mGeometryGeneratorExpression.hasEvalError() ) + QgsMessageLog::logMessage( QObject::tr( "Labeling" ), mGeometryGeneratorExpression.evalErrorString() ); + + feature.setGeometry( geometry ); + } // store data defined-derived values for later adding to label feature for use during rendering dataDefinedValues.clear();