Skip to content

Commit a6800e9

Browse files
committed
Fix division by 0
1 parent 1f04188 commit a6800e9

File tree

1 file changed

+40
-35
lines changed

1 file changed

+40
-35
lines changed

src/core/qgsvectorlayerfeaturecounter.cpp

+40-35
Original file line numberDiff line numberDiff line change
@@ -18,50 +18,55 @@ bool QgsVectorLayerFeatureCounter::run()
1818
mSymbolFeatureCountMap.insert( symbolIt->first, 0 );
1919
}
2020

21-
int featuresCounted = 0;
21+
// If there are no features to be counted, we can spare us the trouble
22+
if ( mFeatureCount > 0 )
23+
{
24+
int featuresCounted = 0;
2225

23-
// Renderer (rule based) may depend on context scale, with scale is ignored if 0
24-
QgsRenderContext renderContext;
25-
renderContext.setRendererScale( 0 );
26-
renderContext.expressionContext().appendScopes( mExpressionContextScopes );
26+
// Renderer (rule based) may depend on context scale, with scale is ignored if 0
27+
QgsRenderContext renderContext;
28+
renderContext.setRendererScale( 0 );
29+
renderContext.expressionContext().appendScopes( mExpressionContextScopes );
2730

28-
QgsFeatureRequest request;
29-
if ( !mRenderer->filterNeedsGeometry() )
30-
request.setFlags( QgsFeatureRequest::NoGeometry );
31-
request.setSubsetOfAttributes( mRenderer->usedAttributes( renderContext ), mSource->fields() );
32-
QgsFeatureIterator fit = mSource->getFeatures( request );
31+
QgsFeatureRequest request;
32+
if ( !mRenderer->filterNeedsGeometry() )
33+
request.setFlags( QgsFeatureRequest::NoGeometry );
34+
request.setSubsetOfAttributes( mRenderer->usedAttributes( renderContext ), mSource->fields() );
35+
QgsFeatureIterator fit = mSource->getFeatures( request );
3336

34-
// TODO: replace QgsInterruptionChecker with QgsFeedback
35-
// fit.setInterruptionChecker( mFeedback );
37+
// TODO: replace QgsInterruptionChecker with QgsFeedback
38+
// fit.setInterruptionChecker( mFeedback );
3639

37-
mRenderer->startRender( renderContext, mSource->fields() );
40+
mRenderer->startRender( renderContext, mSource->fields() );
3841

39-
double progress = 0;
40-
QgsFeature f;
41-
while ( fit.nextFeature( f ) )
42-
{
43-
renderContext.expressionContext().setFeature( f );
44-
QSet<QString> featureKeyList = mRenderer->legendKeysForFeature( f, renderContext );
45-
Q_FOREACH ( const QString &key, featureKeyList )
42+
double progress = 0;
43+
QgsFeature f;
44+
while ( fit.nextFeature( f ) )
4645
{
47-
mSymbolFeatureCountMap[key] += 1;
48-
}
49-
++featuresCounted;
46+
renderContext.expressionContext().setFeature( f );
47+
QSet<QString> featureKeyList = mRenderer->legendKeysForFeature( f, renderContext );
48+
Q_FOREACH ( const QString &key, featureKeyList )
49+
{
50+
mSymbolFeatureCountMap[key] += 1;
51+
}
52+
++featuresCounted;
5053

51-
double p = ( featuresCounted / mFeatureCount ) * 100;
52-
if ( p - progress > 1 )
53-
{
54-
progress = p;
55-
setProgress( progress );
56-
}
54+
double p = ( featuresCounted / mFeatureCount ) * 100;
55+
if ( p - progress > 1 )
56+
{
57+
progress = p;
58+
setProgress( progress );
59+
}
5760

58-
if ( isCanceled() )
59-
{
60-
mRenderer->stopRender( renderContext );
61-
return false;
61+
if ( isCanceled() )
62+
{
63+
mRenderer->stopRender( renderContext );
64+
return false;
65+
}
6266
}
67+
mRenderer->stopRender( renderContext );
6368
}
64-
mRenderer->stopRender( renderContext );
69+
6570
setProgress( 100 );
6671

6772
emit symbolsCounted();
@@ -70,5 +75,5 @@ bool QgsVectorLayerFeatureCounter::run()
7075

7176
QHash<QString, long> QgsVectorLayerFeatureCounter::symbolFeatureCountMap() const
7277
{
73-
return mSymbolFeatureCountMap;
78+
return mSymbolFeatureCountMap;
7479
}

0 commit comments

Comments
 (0)