Fix size scaling ignored for line symbology (fix #11751)

This commit is contained in:
Nyall Dawson 2014-11-28 10:47:18 +11:00
parent 35556de96f
commit 52a2feda5a
2 changed files with 16 additions and 9 deletions

View File

@ -302,6 +302,12 @@ void QgsSimpleLineSymbolLayerV2::renderPolyline( const QPolygonF& points, QgsSym
return; return;
} }
//size scaling by field
if ( context.renderHints() & QgsSymbolV2::DataDefinedSizeScale )
{
applySizeScale( context, mPen, mSelPen );
}
double offset = mOffset; double offset = mOffset;
applyDataDefinedSymbology( context, mPen, mSelPen, offset ); applyDataDefinedSymbology( context, mPen, mSelPen, offset );
@ -458,24 +464,24 @@ QgsSymbolLayerV2* QgsSimpleLineSymbolLayerV2::createFromSld( QDomElement &elemen
return l; return l;
} }
void QgsSimpleLineSymbolLayerV2::applySizeScale( QgsSymbolV2RenderContext& context, QPen& pen, QPen& selPen )
{
double scaledWidth = mWidth * QgsSymbolLayerV2Utils::lineWidthScaleFactor( context.renderContext(), mWidthUnit, mWidthMapUnitScale );
pen.setWidthF( scaledWidth );
selPen.setWidthF( scaledWidth );
}
void QgsSimpleLineSymbolLayerV2::applyDataDefinedSymbology( QgsSymbolV2RenderContext& context, QPen& pen, QPen& selPen, double& offset ) void QgsSimpleLineSymbolLayerV2::applyDataDefinedSymbology( QgsSymbolV2RenderContext& context, QPen& pen, QPen& selPen, double& offset )
{ {
if ( mDataDefinedProperties.isEmpty() ) if ( mDataDefinedProperties.isEmpty() )
return; // shortcut return; // shortcut
//data defined properties //data defined properties
double scaledWidth = 0;
QgsExpression* strokeWidthExpression = expression( "width" ); QgsExpression* strokeWidthExpression = expression( "width" );
if ( strokeWidthExpression ) if ( strokeWidthExpression )
{ {
scaledWidth = strokeWidthExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toDouble() double scaledWidth = strokeWidthExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toDouble()
* QgsSymbolLayerV2Utils::lineWidthScaleFactor( context.renderContext(), mWidthUnit, mWidthMapUnitScale ); * QgsSymbolLayerV2Utils::lineWidthScaleFactor( context.renderContext(), mWidthUnit, mWidthMapUnitScale );
pen.setWidthF( scaledWidth );
selPen.setWidthF( scaledWidth );
}
else if ( context.renderHints() & QgsSymbolV2::DataDefinedSizeScale )
{
scaledWidth = mWidth * QgsSymbolLayerV2Utils::lineWidthScaleFactor( context.renderContext(), mWidthUnit, mWidthMapUnitScale );
pen.setWidthF( scaledWidth ); pen.setWidthF( scaledWidth );
selPen.setWidthF( scaledWidth ); selPen.setWidthF( scaledWidth );
} }

View File

@ -137,6 +137,7 @@ class CORE_EXPORT QgsSimpleLineSymbolLayerV2 : public QgsLineSymbolLayerV2
private: private:
//helper functions for data defined symbology //helper functions for data defined symbology
void applyDataDefinedSymbology( QgsSymbolV2RenderContext& context, QPen& pen, QPen& selPen, double& offset ); void applyDataDefinedSymbology( QgsSymbolV2RenderContext& context, QPen& pen, QPen& selPen, double& offset );
void applySizeScale( QgsSymbolV2RenderContext& context, QPen& pen, QPen& selPen );
}; };
///////// /////////