Index: src/gui/symbology-ng/qgssymbollayerv2widget.cpp
===================================================================
--- src/gui/symbology-ng/qgssymbollayerv2widget.cpp (Revision 14780)
+++ src/gui/symbology-ng/qgssymbollayerv2widget.cpp (Arbeitskopie)
@@ -361,6 +361,8 @@
connect( spinOffset, SIGNAL( valueChanged( double ) ), this, SLOT( setOffset() ) );
connect( radInterval, SIGNAL( clicked() ), this, SLOT( setPlacement() ) );
connect( radVertex, SIGNAL( clicked() ), this, SLOT( setPlacement() ) );
+ connect( radVertexLast, SIGNAL( clicked() ),this, SLOT( setPlacement() ) );
+ connect( radVertexFirst, SIGNAL( clicked() ),this, SLOT( setPlacement() ) );
}
void QgsMarkerLineSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer )
@@ -377,8 +379,12 @@
spinOffset->setValue( mLayer->offset() );
if ( mLayer->placement() == QgsMarkerLineSymbolLayerV2::Interval )
radInterval->setChecked( true );
+ else if ( mLayer->placement() == QgsMarkerLineSymbolLayerV2::Vertex )
+ radVertex->setChecked( true );
+ else if ( mLayer->placement() == QgsMarkerLineSymbolLayerV2::LastVertex )
+ radVertexLast->setChecked( true );
else
- radVertex->setChecked( true );
+ radVertexFirst->setChecked( true );
updateMarker();
setPlacement(); // update gui
}
@@ -426,8 +432,17 @@
void QgsMarkerLineSymbolLayerV2Widget::setPlacement()
{
bool interval = radInterval->isChecked();
- mLayer->setPlacement( interval ? QgsMarkerLineSymbolLayerV2::Interval : QgsMarkerLineSymbolLayerV2::Vertex );
spinInterval->setEnabled( interval );
+ //mLayer->setPlacement( interval ? QgsMarkerLineSymbolLayerV2::Interval : QgsMarkerLineSymbolLayerV2::Vertex );
+ if ( radInterval->isChecked() )
+ mLayer->setPlacement( QgsMarkerLineSymbolLayerV2::Interval );
+ else if ( radVertex->isChecked() )
+ mLayer->setPlacement( QgsMarkerLineSymbolLayerV2::Vertex );
+ else if ( radVertexLast->isChecked() )
+ mLayer->setPlacement( QgsMarkerLineSymbolLayerV2::LastVertex );
+ else
+ mLayer->setPlacement( QgsMarkerLineSymbolLayerV2::FirstVertex );
+
emit changed();
}
Index: src/core/symbology-ng/qgslinesymbollayerv2.h
===================================================================
--- src/core/symbology-ng/qgslinesymbollayerv2.h (Revision 14780)
+++ src/core/symbology-ng/qgslinesymbollayerv2.h (Arbeitskopie)
@@ -88,7 +88,9 @@
enum Placement
{
Interval,
- Vertex
+ Vertex,
+ LastVertex,
+ FirstVertex
};
// static stuff
Index: src/core/symbology-ng/qgslinesymbollayerv2.cpp
===================================================================
--- src/core/symbology-ng/qgslinesymbollayerv2.cpp (Revision 14780)
+++ src/core/symbology-ng/qgslinesymbollayerv2.cpp (Arbeitskopie)
@@ -239,7 +239,14 @@
if ( props.contains( "offset" ) )
x->setOffset( props["offset"].toDouble() );
if ( props.contains( "placement" ) )
- x->setPlacement( props["placement"] == "vertex" ? Vertex : Interval );
+ if ( props["placement"] == "vertex" )
+ x->setPlacement( Vertex );
+ else if ( props["placement"] == "lastvertex" )
+ x->setPlacement( LastVertex );
+ else if ( props["placement"] == "firstvertex" )
+ x->setPlacement( FirstVertex );
+ else
+ x->setPlacement( Interval );
return x;
}
@@ -279,18 +286,18 @@
{
if ( mOffset == 0 )
{
- if ( mPlacement == Vertex )
+ if ( mPlacement == Interval )
+ renderPolylineInterval( points, context );
+ else
renderPolylineVertex( points, context );
- else
- renderPolylineInterval( points, context );
}
else
{
QPolygonF points2 = ::offsetLine( points, context.outputLineWidth( mOffset ) );
- if ( mPlacement == Vertex )
- renderPolylineVertex( points2, context );
+ if ( mPlacement == Interval )
+ renderPolylineInterval( points2, context );
else
- renderPolylineInterval( points2, context );
+ renderPolylineVertex( points2, context );
}
}
@@ -360,9 +367,26 @@
double origAngle = mMarker->angle();
double angle;
+ int i, maxCount;
- for ( int i = 0; i < points.count(); ++i )
+ if( mPlacement == FirstVertex )
{
+ i = 0;
+ maxCount = 1;
+ }
+ else if( mPlacement == LastVertex )
+ {
+ i = points.count() - 1;
+ maxCount = points.count();
+ }
+ else
+ {
+ i = 0;
+ maxCount = points.count();
+ }
+
+ for ( ; i < maxCount; ++i )
+ {
const QPointF& pt = points[i];
// rotate marker (if desired)
@@ -395,7 +419,7 @@
double unitX = cos( a1 ) + cos( a2 ), unitY = sin( a1 ) + sin( a2 );
angle = atan2( unitY, unitX );
}
- mMarker->setAngle( angle * 180 / M_PI );
+ mMarker->setAngle(origAngle + angle * 180 / M_PI );
}
mMarker->renderPoint( points.at( i ), rc, -1, context.selected() );
@@ -411,7 +435,14 @@
map["rotate"] = ( mRotateMarker ? "1" : "0" );
map["interval"] = QString::number( mInterval );
map["offset"] = QString::number( mOffset );
- map["placement"] = ( mPlacement == Vertex ? "vertex" : "interval" );
+ if ( mPlacement == Vertex )
+ map["placement"] = "vertex";
+ else if ( mPlacement == LastVertex )
+ map["placement"] = "lastvertex";
+ else if ( mPlacement == FirstVertex )
+ map["placement"] = "firstvertex";
+ else
+ map["placement"] = "interval";
return map;
}
Index: src/ui/symbollayer/widget_markerline.ui
===================================================================
--- src/ui/symbollayer/widget_markerline.ui (Revision 14780)
+++ src/ui/symbollayer/widget_markerline.ui (Arbeitskopie)
@@ -7,114 +7,124 @@
0
0
352
- 232
+ 281
Form
-
- -
-
-
-
-
-
- Marker
-
-
-
- -
-
-
- Change
-
-
-
- -
-
-
- Marker placement
-
-
-
- -
-
-
- with interval
-
-
- true
-
-
-
- -
-
-
- 2
-
-
- 100000.000000000000000
-
-
- 1.000000000000000
-
-
-
- -
-
-
- on every vertex
-
-
-
- -
-
-
- Rotate marker
-
-
-
- -
-
-
- Line offset
-
-
-
- -
-
-
- 2
-
-
- -100000.000000000000000
-
-
- 100000.000000000000000
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Preferred
-
-
-
- 110
- 20
-
-
-
-
-
+
+ -
+
+
+ Marker
+
+
- -
+
-
+
+
+ Change
+
+
+
+ -
+ Qt::Horizontal
+
+
+ QSizePolicy::Preferred
+
+
+
+ 109
+ 20
+
+
+
+
+ -
+
+
+ Marker placement
+
+
+
+ -
+
+
+ with interval
+
+
+ true
+
+
+
+ -
+
+
+ 2
+
+
+ 100000.000000000000000
+
+
+ 1.000000000000000
+
+
+
+ -
+
+
+ on every vertex
+
+
+
+ -
+
+
+ on last vertex only
+
+
+
+ -
+
+
+ on first vertex only
+
+
+
+ -
+
+
+ Rotate marker
+
+
+
+ -
+
+
+ Line offset
+
+
+
+ -
+
+
+ 2
+
+
+ -100000.000000000000000
+
+
+ 100000.000000000000000
+
+
+
+ -
+
+
Qt::Vertical