@@ -738,6 +738,9 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
738
738
mSymbolRenderContext ->expressionContextScope ()->setVariable ( QgsExpressionContext::EXPR_GEOMETRY_PART_NUM, 1 );
739
739
}
740
740
741
+ // Collection of markers to paint
742
+ QPolygonF markers;
743
+
741
744
switch ( QgsWKBTypes::flatType ( segmentizedGeometry->geometry ()->wkbType () ) )
742
745
{
743
746
case QgsWKBTypes::Point :
@@ -760,6 +763,11 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
760
763
context.painter ()->setBrush ( QColor ( 255 , 0 , 0 , 100 ) );
761
764
context.painter ()->drawRect ( static_cast <QgsMarkerSymbolV2*>( this )->bounds ( pt, context ) );
762
765
}
766
+
767
+ if ( drawVertexMarker )
768
+ {
769
+ markers << pt;
770
+ }
763
771
}
764
772
break ;
765
773
case QgsWKBTypes::LineString:
@@ -772,6 +780,11 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
772
780
}
773
781
_getLineString ( pts, context, QgsConstWkbPtr ( segmentizedGeometry->asWkb (), segmentizedGeometry->wkbSize () ), !tileMapRendering && clipFeaturesToExtent () );
774
782
static_cast <QgsLineSymbolV2*>( this )->renderPolyline ( pts, &feature, context, layer, selected );
783
+
784
+ if ( drawVertexMarker )
785
+ {
786
+ markers = pts;
787
+ }
775
788
}
776
789
break ;
777
790
case QgsWKBTypes::Polygon:
@@ -785,6 +798,16 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
785
798
}
786
799
_getPolygon ( pts, holes, context, QgsConstWkbPtr ( segmentizedGeometry->asWkb (), segmentizedGeometry->wkbSize () ), !tileMapRendering && clipFeaturesToExtent () );
787
800
static_cast <QgsFillSymbolV2*>( this )->renderPolygon ( pts, ( !holes.isEmpty () ? &holes : nullptr ), &feature, context, layer, selected );
801
+
802
+ if ( drawVertexMarker )
803
+ {
804
+ markers = pts;
805
+
806
+ Q_FOREACH ( const QPolygonF& hole, holes )
807
+ {
808
+ markers << hole;
809
+ }
810
+ }
788
811
}
789
812
break ;
790
813
@@ -800,13 +823,23 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
800
823
801
824
QgsMultiPointV2* mp = static_cast < QgsMultiPointV2* >( segmentizedGeometry->geometry () );
802
825
826
+ if ( drawVertexMarker )
827
+ {
828
+ markers.reserve ( mp->numGeometries () );
829
+ }
830
+
803
831
for ( int i = 0 ; i < mp->numGeometries (); ++i )
804
832
{
805
833
mSymbolRenderContext ->expressionContextScope ()->setVariable ( QgsExpressionContext::EXPR_GEOMETRY_PART_NUM, i + 1 );
806
834
807
835
const QgsPointV2* point = static_cast < const QgsPointV2* >( mp->geometryN ( i ) );
808
836
_getPoint ( pt, context, point );
809
837
static_cast <QgsMarkerSymbolV2*>( this )->renderPoint ( pt, &feature, context, layer, selected );
838
+
839
+ if ( drawVertexMarker )
840
+ {
841
+ markers.append ( pt );
842
+ }
810
843
}
811
844
}
812
845
break ;
@@ -840,6 +873,18 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
840
873
}
841
874
wkbPtr = _getLineString ( pts, context, wkbPtr, !tileMapRendering && clipFeaturesToExtent () );
842
875
static_cast <QgsLineSymbolV2*>( this )->renderPolyline ( pts, &feature, context, layer, selected );
876
+
877
+ if ( drawVertexMarker )
878
+ {
879
+ if ( i == 0 )
880
+ {
881
+ markers = pts;
882
+ }
883
+ else
884
+ {
885
+ markers << pts;
886
+ }
887
+ }
843
888
}
844
889
}
845
890
break ;
@@ -875,6 +920,23 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
875
920
876
921
wkbPtr = _getPolygon ( pts, holes, context, wkbPtr, !tileMapRendering && clipFeaturesToExtent () );
877
922
static_cast <QgsFillSymbolV2*>( this )->renderPolygon ( pts, ( !holes.isEmpty () ? &holes : nullptr ), &feature, context, layer, selected );
923
+
924
+ if ( drawVertexMarker )
925
+ {
926
+ if ( i == 0 )
927
+ {
928
+ markers = pts;
929
+ }
930
+ else
931
+ {
932
+ markers << pts;
933
+ }
934
+
935
+ Q_FOREACH ( const QPolygonF& hole, holes )
936
+ {
937
+ markers << hole;
938
+ }
939
+ }
878
940
}
879
941
break ;
880
942
}
@@ -903,27 +965,9 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
903
965
904
966
if ( drawVertexMarker )
905
967
{
906
- const QgsCoordinateTransform* ct = context.coordinateTransform ();
907
- const QgsMapToPixel& mtp = context.mapToPixel ();
908
-
909
- QgsPointV2 vertexPoint;
910
- QgsVertexId vertexId;
911
- double x, y, z;
912
- QPointF mapPoint;
913
- while ( geom->geometry ()->nextVertex ( vertexId, vertexPoint ) )
968
+ Q_FOREACH ( QPointF marker, markers )
914
969
{
915
- // transform
916
- x = vertexPoint.x ();
917
- y = vertexPoint.y ();
918
- z = vertexPoint.z ();
919
- if ( ct )
920
- {
921
- ct->transformInPlace ( x, y, z );
922
- }
923
- mapPoint.setX ( x );
924
- mapPoint.setY ( y );
925
- mtp.transformInPlace ( mapPoint.rx (), mapPoint.ry () );
926
- QgsVectorLayer::drawVertexMarker ( mapPoint.x (), mapPoint.y (), *context.painter (),
970
+ QgsVectorLayer::drawVertexMarker ( marker.x (), marker.y (), *context.painter (),
927
971
static_cast < QgsVectorLayer::VertexMarkerType >( currentVertexMarkerType ),
928
972
currentVertexMarkerSize );
929
973
}
0 commit comments