@@ -48,14 +48,15 @@ static QPointF _rotatedOffset( const QPointF& offset, double angle )
4848
4949// ////
5050
51- QgsSimpleMarkerSymbolLayerV2::QgsSimpleMarkerSymbolLayerV2 ( QString name, QColor color, QColor borderColor, double size, double angle )
51+ QgsSimpleMarkerSymbolLayerV2::QgsSimpleMarkerSymbolLayerV2 ( QString name, QColor color, QColor borderColor, double size, double angle, QgsSymbolV2::ScaleMethod scaleMethod )
5252{
5353 mName = name;
5454 mColor = color;
5555 mBorderColor = borderColor;
5656 mSize = size;
5757 mAngle = angle;
5858 mOffset = QPointF ( 0 , 0 );
59+ mScaleMethod = scaleMethod;
5960}
6061
6162QgsSymbolLayerV2* QgsSimpleMarkerSymbolLayerV2::create ( const QgsStringMap& props )
@@ -65,6 +66,7 @@ QgsSymbolLayerV2* QgsSimpleMarkerSymbolLayerV2::create( const QgsStringMap& prop
6566 QColor borderColor = DEFAULT_SIMPLEMARKER_BORDERCOLOR;
6667 double size = DEFAULT_SIMPLEMARKER_SIZE;
6768 double angle = DEFAULT_SIMPLEMARKER_ANGLE;
69+ QgsSymbolV2::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD;
6870
6971 if ( props.contains ( " name" ) )
7072 name = props[" name" ];
@@ -76,8 +78,10 @@ QgsSymbolLayerV2* QgsSimpleMarkerSymbolLayerV2::create( const QgsStringMap& prop
7678 size = props[" size" ].toDouble ();
7779 if ( props.contains ( " angle" ) )
7880 angle = props[" angle" ].toDouble ();
81+ if ( props.contains ( " scale_method" ) )
82+ scaleMethod = QgsSymbolLayerV2Utils::decodeScaleMethod ( props[" scale_method" ] );
7983
80- QgsSimpleMarkerSymbolLayerV2* m = new QgsSimpleMarkerSymbolLayerV2 ( name, color, borderColor, size, angle );
84+ QgsSimpleMarkerSymbolLayerV2* m = new QgsSimpleMarkerSymbolLayerV2 ( name, color, borderColor, size, angle, scaleMethod );
8185 if ( props.contains ( " offset" ) )
8286 m->setOffset ( QgsSymbolLayerV2Utils::decodePoint ( props[" offset" ] ) );
8387 return m;
@@ -402,6 +406,14 @@ void QgsSimpleMarkerSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV
402406 if ( hasDataDefinedSize )
403407 {
404408 double scaledSize = context.outputLineWidth ( mSize );
409+
410+ switch ( mScaleMethod )
411+ {
412+ case QgsSymbolV2::ScaleArea:
413+ scaledSize = sqrt ( scaledSize );
414+ break ;
415+ }
416+
405417 double half = scaledSize / 2.0 ;
406418 transform.scale ( half, half );
407419 }
@@ -432,12 +444,13 @@ QgsStringMap QgsSimpleMarkerSymbolLayerV2::properties() const
432444 map[" size" ] = QString::number ( mSize );
433445 map[" angle" ] = QString::number ( mAngle );
434446 map[" offset" ] = QgsSymbolLayerV2Utils::encodePoint ( mOffset );
447+ map[" scale_method" ] = QgsSymbolLayerV2Utils::encodeScaleMethod ( mScaleMethod );
435448 return map;
436449}
437450
438451QgsSymbolLayerV2* QgsSimpleMarkerSymbolLayerV2::clone () const
439452{
440- QgsSimpleMarkerSymbolLayerV2* m = new QgsSimpleMarkerSymbolLayerV2 ( mName , mColor , mBorderColor , mSize , mAngle );
453+ QgsSimpleMarkerSymbolLayerV2* m = new QgsSimpleMarkerSymbolLayerV2 ( mName , mColor , mBorderColor , mSize , mAngle , mScaleMethod );
441454 m->setOffset ( mOffset );
442455 return m;
443456}
0 commit comments