Skip to content

Commit ace2844

Browse files
committed
Rule-based renderer: enable new labeling
1 parent 75512bc commit ace2844

8 files changed

+37
-31
lines changed

python/core/symbology-ng-core.sip

+2-2
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public:
8181

8282
virtual QgsSymbolV2List symbols()=0;
8383

84-
virtual void renderFeature(QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
84+
virtual bool renderFeature(QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
8585

8686
bool usingSymbolLevels() const;
8787
void setUsingSymbolLevels(bool usingSymbolLevels);
@@ -438,7 +438,7 @@ class QgsRuleBasedRendererV2 : QgsFeatureRendererV2
438438
//! return symbol for current feature. Should not be used individually: there could be more symbols for a feature
439439
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
440440

441-
virtual void renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
441+
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
442442

443443
virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer );
444444

src/core/qgsvectorlayer.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -744,7 +744,7 @@ void QgsVectorLayer::drawRendererV2( QgsRenderContext& rendererContext, bool lab
744744
bool drawMarker = ( mEditable && ( !vertexMarkerOnlyForSelection || sel ) );
745745

746746
// render feature
747-
mRendererV2->renderFeature( fet, rendererContext, -1, sel, drawMarker );
747+
bool rendered = mRendererV2->renderFeature( fet, rendererContext, -1, sel, drawMarker );
748748

749749
if ( mEditable )
750750
{
@@ -753,7 +753,7 @@ void QgsVectorLayer::drawRendererV2( QgsRenderContext& rendererContext, bool lab
753753
}
754754

755755
// labeling - register feature
756-
if ( mRendererV2->symbolForFeature( fet ) != NULL && rendererContext.labelingEngine() )
756+
if ( rendered && rendererContext.labelingEngine() )
757757
{
758758
if ( labeling )
759759
{

src/core/symbology-ng/qgspointdisplacementrenderer.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ QgsFeatureRendererV2* QgsPointDisplacementRenderer::clone()
6666
return r;
6767
}
6868

69-
void QgsPointDisplacementRenderer::renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer, bool selected, bool drawVertexMarker )
69+
bool QgsPointDisplacementRenderer::renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer, bool selected, bool drawVertexMarker )
7070
{
7171
Q_UNUSED( drawVertexMarker );
7272
//point position in screen coords
@@ -75,7 +75,7 @@ void QgsPointDisplacementRenderer::renderFeature( QgsFeature& feature, QgsRender
7575
if ( geomType != QGis::WKBPoint && geomType != QGis::WKBPoint25D )
7676
{
7777
//can only render point type
78-
return;
78+
return false;
7979
}
8080
QPointF pt;
8181
_getPoint( pt, context, geom->asWkb() );
@@ -125,7 +125,7 @@ void QgsPointDisplacementRenderer::renderFeature( QgsFeature& feature, QgsRender
125125

126126
if ( symbolList.isEmpty() && labelAttributeList.isEmpty() )
127127
{
128-
return; //display all point symbols for one posi
128+
return true; //display all point symbols for one posi
129129
}
130130

131131

@@ -176,6 +176,7 @@ void QgsPointDisplacementRenderer::renderFeature( QgsFeature& feature, QgsRender
176176
drawSymbols( feature, context, symbolList, symbolPositions, selected );
177177
//and also the labels
178178
drawLabels( pt, symbolContext, labelPositions, labelAttributeList );
179+
return true;
179180
}
180181

181182
void QgsPointDisplacementRenderer::setEmbeddedRenderer( QgsFeatureRendererV2* r )

src/core/symbology-ng/qgspointdisplacementrenderer.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class CORE_EXPORT QgsPointDisplacementRenderer: public QgsFeatureRendererV2
3737
QgsFeatureRendererV2* clone();
3838

3939
/**Reimplemented from QgsFeatureRendererV2*/
40-
void renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
40+
bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
4141

4242
QgsSymbolV2* symbolForFeature( QgsFeature& feature );
4343

src/core/symbology-ng/qgsrendererv2.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -188,13 +188,14 @@ QgsFeatureRendererV2* QgsFeatureRendererV2::defaultRenderer( QGis::GeometryType
188188
}
189189

190190

191-
void QgsFeatureRendererV2::renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer, bool selected, bool drawVertexMarker )
191+
bool QgsFeatureRendererV2::renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer, bool selected, bool drawVertexMarker )
192192
{
193193
QgsSymbolV2* symbol = symbolForFeature( feature );
194194
if ( symbol == NULL )
195-
return;
195+
return false;
196196

197197
renderFeatureWithSymbol( feature, symbol, context, layer, selected, drawVertexMarker );
198+
return true;
198199
}
199200

200201
void QgsFeatureRendererV2::renderFeatureWithSymbol( QgsFeature& feature, QgsSymbolV2* symbol, QgsRenderContext& context, int layer, bool selected, bool drawVertexMarker )

src/core/symbology-ng/qgsrendererv2.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class CORE_EXPORT QgsFeatureRendererV2
7373

7474
virtual QgsFeatureRendererV2* clone() = 0;
7575

76-
virtual void renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
76+
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
7777

7878
//! for debugging
7979
virtual QString dump();

src/core/symbology-ng/qgsrulebasedrendererv2.cpp

+22-18
Original file line numberDiff line numberDiff line change
@@ -260,28 +260,32 @@ void QgsRuleBasedRendererV2::Rule::setNormZLevels( const QMap<int, int>& zLevels
260260
}
261261

262262

263-
void QgsRuleBasedRendererV2::Rule::renderFeature( QgsRuleBasedRendererV2::FeatureToRender& featToRender, QgsRenderContext& context, QgsRuleBasedRendererV2::RenderQueue& renderQueue )
263+
bool QgsRuleBasedRendererV2::Rule::renderFeature( QgsRuleBasedRendererV2::FeatureToRender& featToRender, QgsRenderContext& context, QgsRuleBasedRendererV2::RenderQueue& renderQueue )
264264
{
265-
if ( isFilterOK( featToRender.feat ) )
265+
if ( !isFilterOK( featToRender.feat ) )
266+
return false;
267+
268+
bool rendered = false;
269+
270+
// create job for this feature and this symbol, add to list of jobs
271+
if ( mSymbol )
266272
{
267-
// create job for this feature and this symbol, add to list of jobs
268-
if ( mSymbol )
273+
// add job to the queue: each symbol's zLevel must be added
274+
foreach( int normZLevel, mSymbolNormZLevels )
269275
{
270-
// add job to the queue: each symbol's zLevel must be added
271-
foreach( int normZLevel, mSymbolNormZLevels )
272-
{
273-
//QgsDebugMsg(QString("add job at level %1").arg(normZLevel));
274-
renderQueue[normZLevel].jobs.append( new RenderJob( featToRender, mSymbol ) );
275-
}
276+
//QgsDebugMsg(QString("add job at level %1").arg(normZLevel));
277+
renderQueue[normZLevel].jobs.append( new RenderJob( featToRender, mSymbol ) );
276278
}
279+
rendered = true;
280+
}
277281

278-
// process children
279-
for ( QList<Rule*>::iterator it = mActiveChildren.begin(); it != mActiveChildren.end(); ++it )
280-
{
281-
Rule* rule = *it;
282-
rule->renderFeature( featToRender, context, renderQueue );
283-
}
282+
// process children
283+
for ( QList<Rule*>::iterator it = mActiveChildren.begin(); it != mActiveChildren.end(); ++it )
284+
{
285+
Rule* rule = *it;
286+
rendered |= rule->renderFeature( featToRender, context, renderQueue );
284287
}
288+
return rendered;
285289
}
286290

287291

@@ -364,7 +368,7 @@ QgsSymbolV2* QgsRuleBasedRendererV2::symbolForFeature( QgsFeature& )
364368
return 0;
365369
}
366370

367-
void QgsRuleBasedRendererV2::renderFeature( QgsFeature& feature,
371+
bool QgsRuleBasedRendererV2::renderFeature( QgsFeature& feature,
368372
QgsRenderContext& context,
369373
int layer,
370374
bool selected,
@@ -376,7 +380,7 @@ void QgsRuleBasedRendererV2::renderFeature( QgsFeature& feature,
376380
mCurrentFeatures.append( FeatureToRender( feature, flags ) );
377381

378382
// check each active rule
379-
mRootRule->renderFeature( mCurrentFeatures.last(), context, mRenderQueue );
383+
return mRootRule->renderFeature( mCurrentFeatures.last(), context, mRenderQueue );
380384
}
381385

382386

src/core/symbology-ng/qgsrulebasedrendererv2.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ class CORE_EXPORT QgsRuleBasedRendererV2 : public QgsFeatureRendererV2
125125
//! assign normalized z-levels [0..N-1] for this rule's symbol for quick access during rendering
126126
void setNormZLevels( const QMap<int, int>& zLevelsToNormLevels );
127127

128-
void renderFeature( FeatureToRender& featToRender, QgsRenderContext& context, RenderQueue& renderQueue );
128+
bool renderFeature( FeatureToRender& featToRender, QgsRenderContext& context, RenderQueue& renderQueue );
129129

130130
void stopRender( QgsRenderContext& context );
131131

@@ -179,7 +179,7 @@ class CORE_EXPORT QgsRuleBasedRendererV2 : public QgsFeatureRendererV2
179179
//! return symbol for current feature. Should not be used individually: there could be more symbols for a feature
180180
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
181181

182-
virtual void renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
182+
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
183183

184184
virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer );
185185

0 commit comments

Comments
 (0)