diff --git a/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp b/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp index 97314a69729..ee44ee01a5f 100644 --- a/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp +++ b/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp @@ -780,6 +780,15 @@ QgsSymbolLayerV2* QgsSvgMarkerSymbolLayerV2::create( const QgsStringMap& props ) if ( props.contains( "outline_width_unit" ) ) m->setOutlineWidthUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["outline_width_unit"] ) ); + if ( props.contains( "horizontal_anchor_point" ) ) + { + m->setHorizontalAnchorPoint( QgsMarkerSymbolLayerV2::HorizontalAnchorPoint( props[ "horizontal_anchor_point" ].toInt() ) ); + } + if ( props.contains( "vertical_anchor_point" ) ) + { + m->setVerticalAnchorPoint( QgsMarkerSymbolLayerV2::VerticalAnchorPoint( props[ "vertical_anchor_point" ].toInt() ) ); + } + //data defined properties if ( props.contains( "size_expression" ) ) { @@ -887,15 +896,10 @@ void QgsSvgMarkerSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV2Re p->save(); - QPointF offset = mOffset; - QgsExpression* offsetExpression = expression( "offset" ); - if ( offsetExpression ) - { - QString offsetString = offsetExpression->evaluate( const_cast( context.feature() ) ).toString(); - offset = QgsSymbolLayerV2Utils::decodePoint( offsetString ); - } - double offsetX = offset.x() * QgsSymbolLayerV2Utils::lineWidthScaleFactor( context.renderContext(), mOffsetUnit ); - double offsetY = offset.y() * QgsSymbolLayerV2Utils::lineWidthScaleFactor( context.renderContext(), mOffsetUnit ); + //offset + double offsetX = 0; + double offsetY = 0; + markerOffset( context, offsetX, offsetY ); QPointF outputOffset( offsetX, offsetY ); double angle = mAngle; @@ -1016,6 +1020,9 @@ QgsStringMap QgsSvgMarkerSymbolLayerV2::properties() const map["outline"] = mOutlineColor.name(); map["outline-width"] = QString::number( mOutlineWidth ); map["outline_width_unit"] = QgsSymbolLayerV2Utils::encodeOutputUnit( mOutlineWidthUnit ); + map["horizontal_anchor_point"] = QString::number( mHorizontalAnchorPoint ); + map["vertical_anchor_point"] = QString::number( mVerticalAnchorPoint ); + saveDataDefinedProperties( map ); return map; } @@ -1030,6 +1037,8 @@ QgsSymbolLayerV2* QgsSvgMarkerSymbolLayerV2::clone() const m->setOffset( mOffset ); m->setOffsetUnit( mOffsetUnit ); m->setSizeUnit( mSizeUnit ); + m->setHorizontalAnchorPoint( mHorizontalAnchorPoint ); + m->setVerticalAnchorPoint( mVerticalAnchorPoint ); copyDataDefinedProperties( m ); return m; } diff --git a/src/gui/symbology-ng/qgssymbollayerv2widget.cpp b/src/gui/symbology-ng/qgssymbollayerv2widget.cpp index b2f3637fda5..a14e0cbcd9c 100644 --- a/src/gui/symbology-ng/qgssymbollayerv2widget.cpp +++ b/src/gui/symbology-ng/qgssymbollayerv2widget.cpp @@ -1012,6 +1012,15 @@ void QgsSvgMarkerSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer ) mOffsetUnitComboBox->blockSignals( true ); mOffsetUnitComboBox->setCurrentIndex( mLayer->offsetUnit() ); mOffsetUnitComboBox->blockSignals( false ); + + //anchor points + mHorizontalAnchorComboBox->blockSignals( true ); + mVerticalAnchorComboBox->blockSignals( true ); + mHorizontalAnchorComboBox->setCurrentIndex( mLayer->horizontalAnchorPoint() ); + mVerticalAnchorComboBox->setCurrentIndex( mLayer->verticalAnchorPoint() ); + mHorizontalAnchorComboBox->blockSignals( false ); + mVerticalAnchorComboBox->blockSignals( false ); + setGuiForSvg( mLayer ); } @@ -1195,6 +1204,24 @@ void QgsSvgMarkerSymbolLayerV2Widget::on_mDataDefinedPropertiesButton_clicked() } } +void QgsSvgMarkerSymbolLayerV2Widget::on_mHorizontalAnchorComboBox_currentIndexChanged( int index ) +{ + if ( mLayer ) + { + mLayer->setHorizontalAnchorPoint( QgsMarkerSymbolLayerV2::HorizontalAnchorPoint( index ) ); + emit changed(); + } +} + +void QgsSvgMarkerSymbolLayerV2Widget::on_mVerticalAnchorComboBox_currentIndexChanged( int index ) +{ + if ( mLayer ) + { + mLayer->setVerticalAnchorPoint( QgsMarkerSymbolLayerV2::VerticalAnchorPoint( index ) ); + emit changed(); + } +} + ///////////// #include diff --git a/src/gui/symbology-ng/qgssymbollayerv2widget.h b/src/gui/symbology-ng/qgssymbollayerv2widget.h index 835723698cf..74e5fa7a94f 100644 --- a/src/gui/symbology-ng/qgssymbollayerv2widget.h +++ b/src/gui/symbology-ng/qgssymbollayerv2widget.h @@ -222,6 +222,9 @@ class GUI_EXPORT QgsSvgMarkerSymbolLayerV2Widget : public QgsSymbolLayerV2Widget void on_mBorderWidthUnitComboBox_currentIndexChanged( int index ); void on_mOffsetUnitComboBox_currentIndexChanged( int index ); void on_mDataDefinedPropertiesButton_clicked(); + void on_mHorizontalAnchorComboBox_currentIndexChanged( int index ); + void on_mVerticalAnchorComboBox_currentIndexChanged( int index ); + protected: diff --git a/src/ui/symbollayer/widget_svgmarker.ui b/src/ui/symbollayer/widget_svgmarker.ui index 21a859f83f9..648f9f17116 100644 --- a/src/ui/symbollayer/widget_svgmarker.ui +++ b/src/ui/symbollayer/widget_svgmarker.ui @@ -6,112 +6,16 @@ 0 0 - 509 - 516 + 406 + 479 Form - - 1 - - - - - - - - - - ... - - - - - - - - - - 3 - 1 - - - - - - - - - 5 - 1 - - - - QAbstractItemView::NoEditTriggers - - - - 32 - 32 - - - - QListView::Static - - - QListView::Adjust - - - QListView::Batched - - - 2 - - - - 36 - 36 - - - - QListView::IconMode - - - true - - - true - - - - - - - SVG Groups - - - - - - - SVG Image - - - - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - 28 - + @@ -270,14 +174,14 @@ - + Border width - + @@ -308,14 +212,14 @@ - + Offset X,Y - + @@ -371,16 +275,149 @@ - - - - - 0 - 0 - - + + - Data defined properties... + Anchor point + + + + + + + + + + Left + + + + + HCenter + + + + + Right + + + + + + + + + Top + + + + + VCenter + + + + + Bottom + + + + + + + + + + + + + 0 + 0 + + + + Data defined properties... + + + + + + + SVG Groups + + + + + + + SVG Image + + + + + + + + 3 + 1 + + + + + + + + + 5 + 1 + + + + QAbstractItemView::NoEditTriggers + + + + 32 + 32 + + + + QListView::Static + + + QListView::Adjust + + + QListView::Batched + + + 2 + + + + 36 + 36 + + + + QListView::IconMode + + + true + + + true + + + + + + + + + + + + ...