Skip to content

Commit d6d6827

Browse files
committedAug 22, 2015
Port symbols to expression contexts
1 parent 1a7acb0 commit d6d6827

File tree

7 files changed

+243
-132
lines changed

7 files changed

+243
-132
lines changed
 

‎python/core/symbology-ng/qgssymbollayerv2.sip

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,22 @@ class QgsSymbolLayerV2
212212
* @see getDataDefinedProperty
213213
* @note added in QGIS 2.9
214214
*/
215-
virtual QVariant evaluateDataDefinedProperty( const QString& property, const QgsFeature* feature ) const;
215+
virtual QVariant evaluateDataDefinedProperty( const QString& property, const QgsFeature* feature ) const /Deprecated/;
216+
217+
/** Evaluates the matching data defined property and returns the calculated
218+
* value. Prior to evaluation the data defined property must be prepared
219+
* by calling @link prepareExpressions @endlink.
220+
* @param property property key
221+
* @param context symbol render context
222+
* @param defaultVal default value to return if evaluation was not successful
223+
* @param ok if specified, will be set to true if evaluation was successful
224+
* @returns calculated value for data defined property, or default value
225+
* if property does not exist or is deactived.
226+
* @see hasDataDefinedProperty
227+
* @see getDataDefinedProperty
228+
* @note added in QGIS 2.12
229+
*/
230+
virtual QVariant evaluateDataDefinedProperty( const QString& property, const QgsSymbolV2RenderContext& context, const QVariant& defaultVal = QVariant(), bool *ok = 0 ) const;
216231

217232
virtual bool writeDxf( QgsDxfExport& e,
218233
double mmMapUnitScaleFactor,
@@ -253,7 +268,14 @@ class QgsSymbolLayerV2
253268
* @param fields associated layer fields
254269
* @param scale map scale
255270
*/
256-
virtual void prepareExpressions( const QgsFields* fields, double scale = -1.0 );
271+
virtual void prepareExpressions( const QgsFields* fields, double scale = -1.0 ) /Deprecated/;
272+
273+
/** Prepares all data defined property expressions for evaluation. This should
274+
* be called prior to evaluating data defined properties.
275+
* @param context symbol render context
276+
* @note added in QGIS 2.12
277+
*/
278+
virtual void prepareExpressions( const QgsSymbolV2RenderContext& context );
257279

258280
/** Returns the data defined expression associated with a property
259281
* @deprecated use getDataDefinedProperty or evaluateDataDefinedProperty instead

‎src/core/symbology-ng/qgsellipsesymbollayerv2.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,13 @@ void QgsEllipseSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV2Rend
207207
bool ok;
208208
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_WIDTH ) )
209209
{
210-
double width = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_WIDTH, context.feature(), mOutlineWidth ).toDouble();
210+
double width = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_WIDTH, context, mOutlineWidth ).toDouble();
211211
width *= QgsSymbolLayerV2Utils::lineWidthScaleFactor( context.renderContext(), mOutlineWidthUnit, mOutlineWidthMapUnitScale );
212212
mPen.setWidthF( width );
213213
}
214214
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_STYLE ) )
215215
{
216-
QString styleString = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_STYLE, context.feature(), QVariant(), &ok ).toString();
216+
QString styleString = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_STYLE, context, QVariant(), &ok ).toString();
217217
if ( ok )
218218
{
219219
Qt::PenStyle style = QgsSymbolLayerV2Utils::decodePenStyle( styleString );
@@ -222,13 +222,13 @@ void QgsEllipseSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV2Rend
222222
}
223223
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_FILL_COLOR ) )
224224
{
225-
QString colorString = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_FILL_COLOR, context.feature(), QVariant(), &ok ).toString();
225+
QString colorString = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_FILL_COLOR, context, QVariant(), &ok ).toString();
226226
if ( ok )
227227
mBrush.setColor( QColor( QgsSymbolLayerV2Utils::decodeColor( colorString ) ) );
228228
}
229229
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_COLOR ) )
230230
{
231-
QString colorString = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_COLOR, context.feature(), QVariant(), &ok ).toString();
231+
QString colorString = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_COLOR, context, QVariant(), &ok ).toString();
232232
if ( ok )
233233
mPen.setColor( QColor( QgsSymbolLayerV2Utils::decodeColor( colorString ) ) );
234234
}
@@ -239,7 +239,7 @@ void QgsEllipseSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV2Rend
239239
QString symbolName = mSymbolName;
240240
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_SYMBOL_NAME ) )
241241
{
242-
symbolName = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_SYMBOL_NAME, context.feature(), mSymbolName ).toString();
242+
symbolName = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_SYMBOL_NAME, context, mSymbolName ).toString();
243243
}
244244
preparePath( symbolName, context, &scaledWidth, &scaledHeight, context.feature() );
245245
}
@@ -260,7 +260,7 @@ void QgsEllipseSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV2Rend
260260
double rotation = 0.0;
261261
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_ROTATION ) )
262262
{
263-
rotation = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_ROTATION, context.feature(), mAngle ).toDouble() + mLineAngle;
263+
rotation = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_ROTATION, context, mAngle ).toDouble() + mLineAngle;
264264
}
265265
else if ( !qgsDoubleNear( mAngle + mLineAngle, 0.0 ) )
266266
{
@@ -297,7 +297,7 @@ void QgsEllipseSymbolLayerV2::startRender( QgsSymbolV2RenderContext& context )
297297
mPen.setStyle( mOutlineStyle );
298298
mPen.setWidthF( mOutlineWidth * QgsSymbolLayerV2Utils::lineWidthScaleFactor( context.renderContext(), mOutlineWidthUnit, mOutlineWidthMapUnitScale ) );
299299
mBrush.setColor( mFillColor );
300-
prepareExpressions( context.fields(), context.renderContext().rendererScale() );
300+
prepareExpressions( context );
301301
}
302302

303303
void QgsEllipseSymbolLayerV2::stopRender( QgsSymbolV2RenderContext & )
@@ -453,7 +453,7 @@ QgsStringMap QgsEllipseSymbolLayerV2::properties() const
453453
return map;
454454
}
455455

456-
void QgsEllipseSymbolLayerV2::preparePath( const QString& symbolName, QgsSymbolV2RenderContext& context, double* scaledWidth, double* scaledHeight, const QgsFeature* f )
456+
void QgsEllipseSymbolLayerV2::preparePath( const QString& symbolName, QgsSymbolV2RenderContext& context, double* scaledWidth, double* scaledHeight, const QgsFeature* )
457457
{
458458
mPainterPath = QPainterPath();
459459
const QgsRenderContext& ct = context.renderContext();
@@ -462,7 +462,7 @@ void QgsEllipseSymbolLayerV2::preparePath( const QString& symbolName, QgsSymbolV
462462

463463
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_WIDTH ) ) //1. priority: data defined setting on symbol layer le
464464
{
465-
width = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_WIDTH, f, mSymbolWidth ).toDouble();
465+
width = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_WIDTH, context, mSymbolWidth ).toDouble();
466466
}
467467
else if ( context.renderHints() & QgsSymbolV2::DataDefinedSizeScale ) //2. priority: is data defined size on symbol level
468468
{
@@ -481,7 +481,7 @@ void QgsEllipseSymbolLayerV2::preparePath( const QString& symbolName, QgsSymbolV
481481
double height = 0;
482482
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_HEIGHT ) ) //1. priority: data defined setting on symbol layer level
483483
{
484-
height = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_HEIGHT, f, mSymbolHeight ).toDouble();
484+
height = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_HEIGHT, context, mSymbolHeight ).toDouble();
485485
}
486486
else if ( context.renderHints() & QgsSymbolV2::DataDefinedSizeScale ) //2. priority: is data defined size on symbol level
487487
{
@@ -558,14 +558,14 @@ QgsMapUnitScale QgsEllipseSymbolLayerV2::mapUnitScale() const
558558
return QgsMapUnitScale();
559559
}
560560

561-
bool QgsEllipseSymbolLayerV2::writeDxf( QgsDxfExport& e, double mmMapUnitScaleFactor, const QString& layerName, const QgsSymbolV2RenderContext* context, const QgsFeature* f, const QPointF& shift ) const
561+
bool QgsEllipseSymbolLayerV2::writeDxf( QgsDxfExport& e, double mmMapUnitScaleFactor, const QString& layerName, const QgsSymbolV2RenderContext* context, const QgsFeature*, const QPointF& shift ) const
562562
{
563563
//width
564564
double symbolWidth = mSymbolWidth;
565565

566566
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_WIDTH ) ) //1. priority: data defined setting on symbol layer le
567567
{
568-
symbolWidth = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_WIDTH, f, mSymbolWidth ).toDouble();
568+
symbolWidth = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_WIDTH, *context, mSymbolWidth ).toDouble();
569569
}
570570
else if ( context->renderHints() & QgsSymbolV2::DataDefinedSizeScale ) //2. priority: is data defined size on symbol level
571571
{
@@ -580,7 +580,7 @@ bool QgsEllipseSymbolLayerV2::writeDxf( QgsDxfExport& e, double mmMapUnitScaleFa
580580
double symbolHeight = mSymbolHeight;
581581
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_HEIGHT ) ) //1. priority: data defined setting on symbol layer level
582582
{
583-
symbolHeight = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_HEIGHT, f, mSymbolHeight ).toDouble();
583+
symbolHeight = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_HEIGHT, *context, mSymbolHeight ).toDouble();
584584
}
585585
else if ( context->renderHints() & QgsSymbolV2::DataDefinedSizeScale ) //2. priority: is data defined size on symbol level
586586
{
@@ -596,7 +596,7 @@ bool QgsEllipseSymbolLayerV2::writeDxf( QgsDxfExport& e, double mmMapUnitScaleFa
596596

597597
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_WIDTH ) )
598598
{
599-
outlineWidth = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_WIDTH, f, mOutlineWidth ).toDouble();
599+
outlineWidth = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_WIDTH, *context, mOutlineWidth ).toDouble();
600600
}
601601
if ( mOutlineWidthUnit == QgsSymbolV2::MM )
602602
{
@@ -608,7 +608,7 @@ bool QgsEllipseSymbolLayerV2::writeDxf( QgsDxfExport& e, double mmMapUnitScaleFa
608608
QColor fc = mFillColor;
609609
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_FILL_COLOR ) )
610610
{
611-
QString colorString = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_FILL_COLOR, f, QVariant(), &ok ).toString();
611+
QString colorString = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_FILL_COLOR, *context, QVariant(), &ok ).toString();
612612
if ( ok )
613613
fc = QColor( colorString );
614614
}
@@ -617,7 +617,7 @@ bool QgsEllipseSymbolLayerV2::writeDxf( QgsDxfExport& e, double mmMapUnitScaleFa
617617
QColor oc = mOutlineColor;
618618
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_COLOR ) )
619619
{
620-
QString colorString = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_COLOR, f, QVariant(), &ok ).toString();
620+
QString colorString = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_OUTLINE_COLOR, *context, QVariant(), &ok ).toString();
621621
if ( ok )
622622
oc = QColor( colorString );
623623
}
@@ -626,7 +626,7 @@ bool QgsEllipseSymbolLayerV2::writeDxf( QgsDxfExport& e, double mmMapUnitScaleFa
626626
QString symbolName = mSymbolName;
627627
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_SYMBOL_NAME ) )
628628
{
629-
symbolName = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_SYMBOL_NAME, f, mSymbolName ).toString();
629+
symbolName = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_SYMBOL_NAME, *context, mSymbolName ).toString();
630630
}
631631

632632
//offset
@@ -639,7 +639,7 @@ bool QgsEllipseSymbolLayerV2::writeDxf( QgsDxfExport& e, double mmMapUnitScaleFa
639639
double rotation = 0.0;
640640
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_ROTATION ) )
641641
{
642-
rotation = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_ROTATION, f, mAngle ).toDouble() + mLineAngle;
642+
rotation = evaluateDataDefinedProperty( QgsSymbolLayerV2::EXPR_ROTATION, *context, mAngle ).toDouble() + mLineAngle;
643643
}
644644
else if ( !qgsDoubleNear( mAngle + mLineAngle, 0.0 ) )
645645
{

0 commit comments

Comments
 (0)