@@ -733,11 +733,14 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
733
733
deleteSegmentizedGeometry = true ;
734
734
}
735
735
736
+ mSymbolRenderContext ->setGeometryPartCount ( segmentizedGeometry->geometry ()->partCount () );
737
+ mSymbolRenderContext ->setGeometryPartNum ( 1 );
738
+
736
739
if ( mSymbolRenderContext ->expressionContextScope () )
737
740
{
738
741
context.expressionContext ().appendScope ( mSymbolRenderContext ->expressionContextScope () );
739
742
QgsExpressionContextUtils::updateSymbolScope ( this , mSymbolRenderContext ->expressionContextScope () );
740
- mSymbolRenderContext ->expressionContextScope ()->setVariable ( QgsExpressionContext::EXPR_GEOMETRY_PART_COUNT, segmentizedGeometry-> geometry ()-> partCount () );
743
+ mSymbolRenderContext ->expressionContextScope ()->setVariable ( QgsExpressionContext::EXPR_GEOMETRY_PART_COUNT, mSymbolRenderContext -> geometryPartCount () );
741
744
mSymbolRenderContext ->expressionContextScope ()->setVariable ( QgsExpressionContext::EXPR_GEOMETRY_PART_NUM, 1 );
742
745
}
743
746
@@ -833,6 +836,7 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
833
836
834
837
for ( int i = 0 ; i < mp->numGeometries (); ++i )
835
838
{
839
+ mSymbolRenderContext ->setGeometryPartNum ( i + 1 );
836
840
mSymbolRenderContext ->expressionContextScope ()->setVariable ( QgsExpressionContext::EXPR_GEOMETRY_PART_NUM, i + 1 );
837
841
838
842
const QgsPointV2* point = static_cast < const QgsPointV2* >( mp->geometryN ( i ) );
@@ -868,6 +872,7 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
868
872
869
873
for ( unsigned int i = 0 ; i < num && wkbPtr; ++i )
870
874
{
875
+ mSymbolRenderContext ->setGeometryPartNum ( i + 1 );
871
876
mSymbolRenderContext ->expressionContextScope ()->setVariable ( QgsExpressionContext::EXPR_GEOMETRY_PART_NUM, i + 1 );
872
877
873
878
if ( geomCollection )
@@ -914,6 +919,7 @@ void QgsSymbolV2::renderFeature( const QgsFeature& feature, QgsRenderContext& co
914
919
915
920
for ( unsigned int i = 0 ; i < num && wkbPtr; ++i )
916
921
{
922
+ mSymbolRenderContext ->setGeometryPartNum ( i + 1 );
917
923
mSymbolRenderContext ->expressionContextScope ()->setVariable ( QgsExpressionContext::EXPR_GEOMETRY_PART_NUM, i + 1 );
918
924
919
925
if ( geomCollection )
@@ -1002,7 +1008,9 @@ QgsSymbolV2RenderContext::QgsSymbolV2RenderContext( QgsRenderContext& c, QgsSymb
1002
1008
mSelected( selected ),
1003
1009
mRenderHints( renderHints ),
1004
1010
mFeature( f ),
1005
- mFields( fields )
1011
+ mFields( fields ),
1012
+ mGeometryPartCount( 0 ),
1013
+ mGeometryPartNum( 0 )
1006
1014
{
1007
1015
}
1008
1016
@@ -1440,6 +1448,8 @@ void QgsMarkerSymbolV2::renderPointUsingLayer( QgsMarkerSymbolLayerV2* layer, QP
1440
1448
void QgsMarkerSymbolV2::renderPoint ( QPointF point, const QgsFeature* f, QgsRenderContext& context, int layerIdx, bool selected )
1441
1449
{
1442
1450
QgsSymbolV2RenderContext symbolContext ( context, outputUnit (), mAlpha , selected, mRenderHints , f, nullptr , mapUnitScale () );
1451
+ symbolContext.setGeometryPartCount ( symbolRenderContext ()->geometryPartCount () );
1452
+ symbolContext.setGeometryPartNum ( symbolRenderContext ()->geometryPartNum () );
1443
1453
1444
1454
if ( layerIdx != -1 )
1445
1455
{
@@ -1646,6 +1656,8 @@ void QgsLineSymbolV2::renderPolyline( const QPolygonF& points, const QgsFeature*
1646
1656
// save old painter
1647
1657
QPainter* renderPainter = context.painter ();
1648
1658
QgsSymbolV2RenderContext symbolContext ( context, outputUnit (), mAlpha , selected, mRenderHints , f, nullptr , mapUnitScale () );
1659
+ symbolContext.setGeometryPartCount ( symbolRenderContext ()->geometryPartCount () );
1660
+ symbolContext.setGeometryPartNum ( symbolRenderContext ()->geometryPartNum () );
1649
1661
1650
1662
if ( layerIdx != -1 )
1651
1663
{
@@ -1723,6 +1735,8 @@ QgsFillSymbolV2::QgsFillSymbolV2( const QgsSymbolLayerV2List& layers )
1723
1735
void QgsFillSymbolV2::renderPolygon ( const QPolygonF& points, QList<QPolygonF>* rings, const QgsFeature* f, QgsRenderContext& context, int layerIdx, bool selected )
1724
1736
{
1725
1737
QgsSymbolV2RenderContext symbolContext ( context, outputUnit (), mAlpha , selected, mRenderHints , f, nullptr , mapUnitScale () );
1738
+ symbolContext.setGeometryPartCount ( symbolRenderContext ()->geometryPartCount () );
1739
+ symbolContext.setGeometryPartNum ( symbolRenderContext ()->geometryPartNum () );
1726
1740
1727
1741
if ( layerIdx != -1 )
1728
1742
{
0 commit comments