@@ -581,7 +581,7 @@ QSet<QString> QgsRuleBasedRenderer::Rule::legendKeysForFeature( QgsFeature &feat
581
581
return lst;
582
582
}
583
583
584
- QgsRuleBasedRenderer::RuleList QgsRuleBasedRenderer::Rule::rulesForFeature ( QgsFeature &feat, QgsRenderContext *context )
584
+ QgsRuleBasedRenderer::RuleList QgsRuleBasedRenderer::Rule::rulesForFeature ( QgsFeature &feat, QgsRenderContext *context, bool withElse, bool onlyActive )
585
585
{
586
586
RuleList lst;
587
587
if ( !isFilterOK ( feat, context ) )
@@ -590,9 +590,16 @@ QgsRuleBasedRenderer::RuleList QgsRuleBasedRenderer::Rule::rulesForFeature( QgsF
590
590
if ( mSymbol )
591
591
lst.append ( this );
592
592
593
- Q_FOREACH ( Rule *rule, mActiveChildren )
593
+ RuleList listChildren = children ();
594
+ if ( onlyActive )
595
+ listChildren = mActiveChildren ;
596
+
597
+ Q_FOREACH ( Rule *rule, listChildren )
594
598
{
595
- lst += rule->rulesForFeature ( feat, context );
599
+ if ( rule->isElse () && !withElse )
600
+ continue ;
601
+
602
+ lst += rule->rulesForFeature ( feat, context, withElse, onlyActive );
596
603
}
597
604
return lst;
598
605
}
@@ -1141,7 +1148,24 @@ QString QgsRuleBasedRenderer::dump() const
1141
1148
1142
1149
bool QgsRuleBasedRenderer::willRenderFeature ( QgsFeature &feat, QgsRenderContext &context )
1143
1150
{
1144
- return mRootRule ->willRenderFeature ( feat, &context );
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 ;
1145
1169
}
1146
1170
1147
1171
QgsSymbolList QgsRuleBasedRenderer::symbolsForFeature ( QgsFeature &feat, QgsRenderContext &context )
0 commit comments