@@ -541,13 +541,24 @@ bool QgsRuleBasedRenderer::Rule::willRenderFeature( QgsFeature &feat, QgsRenderC
541
541
{
542
542
if ( !isFilterOK ( feat, context ) )
543
543
return false ;
544
+
544
545
if ( mSymbol )
545
546
return true ;
546
547
547
548
Q_FOREACH ( Rule *rule, mActiveChildren )
548
549
{
549
- if ( rule->willRenderFeature ( feat, context ) )
550
+ if ( rule->isElse () )
551
+ {
552
+ RuleList lst = rulesForFeature ( feat, context, false );
553
+ lst.removeOne ( rule );
554
+
555
+ if ( lst.empty () )
556
+ return true ;
557
+ }
558
+ else if ( !rule->isElse ( ) && rule->willRenderFeature ( feat, context ) )
559
+ {
550
560
return true ;
561
+ }
551
562
}
552
563
return false ;
553
564
}
@@ -581,7 +592,7 @@ QSet<QString> QgsRuleBasedRenderer::Rule::legendKeysForFeature( QgsFeature &feat
581
592
return lst;
582
593
}
583
594
584
- QgsRuleBasedRenderer::RuleList QgsRuleBasedRenderer::Rule::rulesForFeature ( QgsFeature &feat, QgsRenderContext *context, bool withElse, bool onlyActive )
595
+ QgsRuleBasedRenderer::RuleList QgsRuleBasedRenderer::Rule::rulesForFeature ( QgsFeature &feat, QgsRenderContext *context, bool onlyActive )
585
596
{
586
597
RuleList lst;
587
598
if ( !isFilterOK ( feat, context ) )
@@ -596,10 +607,7 @@ QgsRuleBasedRenderer::RuleList QgsRuleBasedRenderer::Rule::rulesForFeature( QgsF
596
607
597
608
Q_FOREACH ( Rule *rule, listChildren )
598
609
{
599
- if ( rule->isElse () && !withElse )
600
- continue ;
601
-
602
- lst += rule->rulesForFeature ( feat, context, withElse, onlyActive );
610
+ lst += rule->rulesForFeature ( feat, context, onlyActive );
603
611
}
604
612
return lst;
605
613
}
@@ -1148,24 +1156,7 @@ QString QgsRuleBasedRenderer::dump() const
1148
1156
1149
1157
bool QgsRuleBasedRenderer::willRenderFeature ( QgsFeature &feat, QgsRenderContext &context )
1150
1158
{
1151
- for ( Rule *rule : mRootRule ->children () )
1152
- {
1153
- if ( ! rule->active () )
1154
- continue ;
1155
-
1156
- // a feature already rendered by another rule shouldn't be considered in a
1157
- // 'else' statement for rendering
1158
- if ( rule->isElse () && mRootRule ->rulesForFeature ( feat, &context, false , false ).empty () )
1159
- {
1160
- return true ;
1161
- }
1162
- else if ( !rule->isElse ( ) && rule->willRenderFeature ( feat, &context ) )
1163
- {
1164
- return true ;
1165
- }
1166
- }
1167
-
1168
- return false ;
1159
+ return mRootRule ->willRenderFeature ( feat, &context );
1169
1160
}
1170
1161
1171
1162
QgsSymbolList QgsRuleBasedRenderer::symbolsForFeature ( QgsFeature &feat, QgsRenderContext &context )
0 commit comments