From b46f49996e1f06f2e2933c3e9136cb0c4d1e6bcd Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 20 Dec 2018 12:44:47 +1000 Subject: [PATCH] [labeling] When a layer is set to "blocking" label mode, correctly handle data defined "is obstacle" and "priority" settings --- src/core/qgsvectorlayerlabelprovider.cpp | 33 +++++++++++++----------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/core/qgsvectorlayerlabelprovider.cpp b/src/core/qgsvectorlayerlabelprovider.cpp index e2b2346f7ff..075d8984b1f 100644 --- a/src/core/qgsvectorlayerlabelprovider.cpp +++ b/src/core/qgsvectorlayerlabelprovider.cpp @@ -134,28 +134,31 @@ bool QgsVectorLayerLabelProvider::prepare( const QgsRenderContext &context, QSet lyr.mCurFields = mFields; - if ( lyr.drawLabels ) + if ( lyr.drawLabels || lyr.obstacle ) { - // add field indices for label's text, from expression or field - if ( lyr.isExpression ) + if ( lyr.drawLabels ) { - // prepare expression for use in QgsPalLayerSettings::registerFeature() - QgsExpression *exp = lyr.getLabelExpression(); - exp->prepare( &context.expressionContext() ); - if ( exp->hasEvalError() ) + // add field indices for label's text, from expression or field + if ( lyr.isExpression ) { - QgsDebugMsgLevel( "Prepare error:" + exp->evalErrorString(), 4 ); + // prepare expression for use in QgsPalLayerSettings::registerFeature() + QgsExpression *exp = lyr.getLabelExpression(); + exp->prepare( &context.expressionContext() ); + if ( exp->hasEvalError() ) + { + QgsDebugMsgLevel( "Prepare error:" + exp->evalErrorString(), 4 ); + } + Q_FOREACH ( const QString &name, exp->referencedColumns() ) + { + QgsDebugMsgLevel( "REFERENCED COLUMN = " + name, 4 ); + attributeNames.insert( name ); + } } - Q_FOREACH ( const QString &name, exp->referencedColumns() ) + else { - QgsDebugMsgLevel( "REFERENCED COLUMN = " + name, 4 ); - attributeNames.insert( name ); + attributeNames.insert( lyr.fieldName ); } } - else - { - attributeNames.insert( lyr.fieldName ); - } lyr.dataDefinedProperties().prepare( context.expressionContext() ); // add field indices of data defined expression or field