Fix obstacle factor is ignored when a layer is set to blocking mode

It was only correctly being respected for fully labeled layers
This commit is contained in:
Nyall Dawson 2019-12-02 15:56:52 +10:00
parent 7f4226d209
commit bee6ab846e

View File

@ -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++;
}