@@ -481,10 +481,27 @@ void QgsSimpleMarkerSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV
481481 return ;
482482 }
483483
484+ QgsExpression *sizeExpression = expression ( " size" );
485+ bool hasDataDefinedSize = context.renderHints () & QgsSymbolV2::DataDefinedSizeScale || sizeExpression;
486+
487+ double scaledSize = mSize ;
488+ if ( hasDataDefinedSize )
489+ {
490+ if ( sizeExpression )
491+ {
492+ scaledSize = sizeExpression->evaluate ( const_cast <QgsFeature*>( context.feature () ) ).toDouble ();
493+ }
494+
495+ if ( mScaleMethod == QgsSymbolV2::ScaleArea )
496+ {
497+ scaledSize = sqrt ( scaledSize );
498+ }
499+ }
500+
484501 // offset
485502 double offsetX = 0 ;
486503 double offsetY = 0 ;
487- markerOffset ( context, offsetX, offsetY );
504+ markerOffset ( context, scaledSize, scaledSize, offsetX, offsetY );
488505 QPointF off ( offsetX, offsetY );
489506
490507 // angle
@@ -522,30 +539,13 @@ void QgsSimpleMarkerSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV
522539 // move to the desired position
523540 transform.translate ( point.x () + off.x (), point.y () + off.y () );
524541
525- QgsExpression *sizeExpression = expression ( " size" );
526- bool hasDataDefinedSize = context.renderHints () & QgsSymbolV2::DataDefinedSizeScale || sizeExpression;
527-
528542 // resize if necessary
529543 if ( hasDataDefinedSize )
530544 {
531- double scaledSize = mSize ;
532- if ( sizeExpression )
533- {
534- scaledSize = sizeExpression->evaluate ( const_cast <QgsFeature*>( context.feature () ) ).toDouble ();
535- }
536-
537- switch ( mScaleMethod )
538- {
539- case QgsSymbolV2::ScaleArea:
540- scaledSize = sqrt ( scaledSize );
541- break ;
542- case QgsSymbolV2::ScaleDiameter:
543- break ;
544- }
545545
546- scaledSize *= QgsSymbolLayerV2Utils::lineWidthScaleFactor ( context.renderContext (), mSizeUnit , mSizeMapUnitScale );
546+ double s = scaledSize * QgsSymbolLayerV2Utils::lineWidthScaleFactor ( context.renderContext (), mSizeUnit , mSizeMapUnitScale );
547547
548- double half = scaledSize / 2.0 ;
548+ double half = s / 2.0 ;
549549 transform.scale ( half, half );
550550 }
551551
@@ -1140,27 +1140,28 @@ void QgsSvgMarkerSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV2Re
11401140 if ( !p )
11411141 return ;
11421142
1143- double size = mSize ;
1143+ double scaledSize = mSize ;
11441144 QgsExpression* sizeExpression = expression ( " size" );
11451145 bool hasDataDefinedSize = context.renderHints () & QgsSymbolV2::DataDefinedSizeScale || sizeExpression;
11461146
11471147 if ( sizeExpression )
11481148 {
1149- size = sizeExpression->evaluate ( const_cast <QgsFeature*>( context.feature () ) ).toDouble ();
1149+ scaledSize = sizeExpression->evaluate ( const_cast <QgsFeature*>( context.feature () ) ).toDouble ();
11501150 }
11511151
11521152 if ( hasDataDefinedSize )
11531153 {
11541154 switch ( mScaleMethod )
11551155 {
11561156 case QgsSymbolV2::ScaleArea:
1157- size = sqrt ( size );
1157+ scaledSize = sqrt ( scaledSize );
11581158 break ;
11591159 case QgsSymbolV2::ScaleDiameter:
11601160 break ;
11611161 }
11621162 }
1163- size *= QgsSymbolLayerV2Utils::lineWidthScaleFactor ( context.renderContext (), mSizeUnit , mSizeMapUnitScale );
1163+
1164+ double size = scaledSize * QgsSymbolLayerV2Utils::lineWidthScaleFactor ( context.renderContext (), mSizeUnit , mSizeMapUnitScale );
11641165
11651166 // don't render symbols with size below one or above 10,000 pixels
11661167 if (( int )size < 1 || 10000.0 < size )
@@ -1173,7 +1174,7 @@ void QgsSvgMarkerSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV2Re
11731174 // offset
11741175 double offsetX = 0 ;
11751176 double offsetY = 0 ;
1176- markerOffset ( context, offsetX, offsetY );
1177+ markerOffset ( context, scaledSize, scaledSize, offsetX, offsetY );
11771178 QPointF outputOffset ( offsetX, offsetY );
11781179
11791180 double angle = mAngle ;
0 commit comments