@@ -735,6 +735,9 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
735
735
mSymbolRenderContext ->expressionContextScope ()->setVariable ( QgsExpressionContext::EXPR_GEOMETRY_PART_NUM, 1 );
736
736
}
737
737
738
+ // Collection of markers to paint, only used for no curve types.
739
+ QPolygonF markers;
740
+
738
741
switch ( QgsWKBTypes::flatType ( segmentizedGeometry->geometry ()->wkbType () ) )
739
742
{
740
743
case QgsWKBTypes::Point :
@@ -757,6 +760,11 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
757
760
context.painter ()->setBrush ( QColor ( 255 , 0 , 0 , 100 ) );
758
761
context.painter ()->drawRect ( static_cast <QgsMarkerSymbolV2*>( this )->bounds ( pt, context, feature ) );
759
762
}
763
+
764
+ if ( drawVertexMarker && !deleteSegmentizedGeometry )
765
+ {
766
+ markers << pt;
767
+ }
760
768
}
761
769
break ;
762
770
case QgsWKBTypes::LineString:
@@ -770,6 +778,11 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
770
778
QgsConstWkbSimplifierPtr wkbPtr ( segmentizedGeometry->asWkb (), segmentizedGeometry->wkbSize (), context.vectorSimplifyMethod () );
771
779
_getLineString ( pts, context, wkbPtr, !tileMapRendering && clipFeaturesToExtent () );
772
780
static_cast <QgsLineSymbolV2*>( this )->renderPolyline ( pts, &feature, context, layer, selected );
781
+
782
+ if ( drawVertexMarker && !deleteSegmentizedGeometry )
783
+ {
784
+ markers = pts;
785
+ }
773
786
}
774
787
break ;
775
788
case QgsWKBTypes::Polygon:
@@ -784,6 +797,16 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
784
797
QgsConstWkbSimplifierPtr wkbPtr ( segmentizedGeometry->asWkb (), segmentizedGeometry->wkbSize (), context.vectorSimplifyMethod () );
785
798
_getPolygon ( pts, holes, context, wkbPtr, !tileMapRendering && clipFeaturesToExtent () );
786
799
static_cast <QgsFillSymbolV2*>( this )->renderPolygon ( pts, ( !holes.isEmpty () ? &holes : nullptr ), &feature, context, layer, selected );
800
+
801
+ if ( drawVertexMarker && !deleteSegmentizedGeometry )
802
+ {
803
+ markers = pts;
804
+
805
+ Q_FOREACH ( const QPolygonF& hole, holes )
806
+ {
807
+ markers << hole;
808
+ }
809
+ }
787
810
}
788
811
break ;
789
812
@@ -799,6 +822,11 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
799
822
800
823
QgsMultiPointV2* mp = static_cast < QgsMultiPointV2* >( segmentizedGeometry->geometry () );
801
824
825
+ if ( drawVertexMarker && !deleteSegmentizedGeometry )
826
+ {
827
+ markers.reserve ( mp->numGeometries () );
828
+ }
829
+
802
830
for ( int i = 0 ; i < mp->numGeometries (); ++i )
803
831
{
804
832
mSymbolRenderContext ->setGeometryPartNum ( i + 1 );
@@ -807,6 +835,11 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
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 && !deleteSegmentizedGeometry )
840
+ {
841
+ markers.append ( pt );
842
+ }
810
843
}
811
844
}
812
845
break ;
@@ -844,6 +877,18 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
844
877
break ;
845
878
}
846
879
static_cast <QgsLineSymbolV2*>( this )->renderPolyline ( pts, &feature, context, layer, selected );
880
+
881
+ if ( drawVertexMarker && !deleteSegmentizedGeometry )
882
+ {
883
+ if ( i == 0 )
884
+ {
885
+ markers = pts;
886
+ }
887
+ else
888
+ {
889
+ markers << pts;
890
+ }
891
+ }
847
892
}
848
893
}
849
894
break ;
@@ -882,6 +927,23 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
882
927
break ;
883
928
}
884
929
static_cast <QgsFillSymbolV2*>( this )->renderPolygon ( pts, ( !holes.isEmpty () ? &holes : nullptr ), &feature, context, layer, selected );
930
+
931
+ if ( drawVertexMarker && !deleteSegmentizedGeometry )
932
+ {
933
+ if ( i == 0 )
934
+ {
935
+ markers = pts;
936
+ }
937
+ else
938
+ {
939
+ markers << pts;
940
+ }
941
+
942
+ Q_FOREACH ( const QPolygonF& hole, holes )
943
+ {
944
+ markers << hole;
945
+ }
946
+ }
885
947
}
886
948
break ;
887
949
}
@@ -910,27 +972,37 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
910
972
911
973
if ( drawVertexMarker )
912
974
{
913
- const QgsCoordinateTransform* ct = context. coordinateTransform ();
914
- const QgsMapToPixel& mtp = context. mapToPixel ();
915
-
916
- QgsPointV2 vertexPoint;
917
- QgsVertexId vertexId ;
918
- double x, y, z;
919
- QPointF mapPoint;
920
- while ( geom-> geometry ()-> nextVertex ( vertexId, vertexPoint ) )
975
+ if ( markers. size () > 0 )
976
+ {
977
+ Q_FOREACH ( QPointF marker, markers )
978
+ {
979
+ renderVertexMarker ( marker, context, currentVertexMarkerType, currentVertexMarkerSize ) ;
980
+ }
981
+ }
982
+ else
921
983
{
922
- // transform
923
- x = vertexPoint.x ();
924
- y = vertexPoint.y ();
925
- z = vertexPoint.z ();
926
- if ( ct )
984
+ const QgsCoordinateTransform* ct = context.coordinateTransform ();
985
+ const QgsMapToPixel& mtp = context.mapToPixel ();
986
+
987
+ QgsPointV2 vertexPoint;
988
+ QgsVertexId vertexId;
989
+ double x, y, z;
990
+ QPointF mapPoint;
991
+ while ( geom->geometry ()->nextVertex ( vertexId, vertexPoint ) )
927
992
{
928
- ct->transformInPlace ( x, y, z );
993
+ // transform
994
+ x = vertexPoint.x ();
995
+ y = vertexPoint.y ();
996
+ z = vertexPoint.z ();
997
+ if ( ct )
998
+ {
999
+ ct->transformInPlace ( x, y, z );
1000
+ }
1001
+ mapPoint.setX ( x );
1002
+ mapPoint.setY ( y );
1003
+ mtp.transformInPlace ( mapPoint.rx (), mapPoint.ry () );
1004
+ renderVertexMarker ( mapPoint, context, currentVertexMarkerType, currentVertexMarkerSize );
929
1005
}
930
- mapPoint.setX ( x );
931
- mapPoint.setY ( y );
932
- mtp.transformInPlace ( mapPoint.rx (), mapPoint.ry () );
933
- renderVertexMarker ( mapPoint, context, currentVertexMarkerType, currentVertexMarkerSize );
934
1006
}
935
1007
}
936
1008
0 commit comments