From bee6ab846e0aaaf6307eeabe9c40e4ea09f10a6c Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 2 Dec 2019 15:56:52 +1000 Subject: [PATCH] Fix obstacle factor is ignored when a layer is set to blocking mode It was only correctly being respected for fully labeled layers --- src/core/qgspallabeling.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/core/qgspallabeling.cpp b/src/core/qgspallabeling.cpp index 36193f9d3cb..32730e32bb0 100644 --- a/src/core/qgspallabeling.cpp +++ b/src/core/qgspallabeling.cpp @@ -2624,6 +2624,26 @@ void QgsPalLayerSettings::registerObstacleFeature( const QgsFeature &f, QgsRende *obstacleFeature = new QgsLabelFeature( f.id(), std::move( geos_geom_clone ), QSizeF( 0, 0 ) ); ( *obstacleFeature )->setIsObstacle( true ); ( *obstacleFeature )->setFeature( f ); + + double featObstacleFactor = obstacleFactor; + if ( mDataDefinedProperties.isActive( QgsPalLayerSettings::ObstacleFactor ) ) + { + context.expressionContext().setOriginalValueVariable( featObstacleFactor ); + QVariant exprVal = mDataDefinedProperties.value( QgsPalLayerSettings::ObstacleFactor, context.expressionContext() ); + if ( exprVal.isValid() ) + { + bool ok; + double factorD = exprVal.toDouble( &ok ); + if ( ok ) + { + factorD = qBound( 0.0, factorD, 10.0 ); + factorD = factorD / 5.0 + 0.0001; // convert 0 -> 10 to 0.0001 -> 2.0 + featObstacleFactor = factorD; + } + } + } + ( *obstacleFeature )->setObstacleFactor( featObstacleFactor ); + mFeatsRegPal++; }