@@ -85,6 +85,12 @@ bool QgsPointDisplacementRenderer::renderFeature( QgsFeature& feature, QgsRender
85
85
if ( !feature.geometry () )
86
86
return false ;
87
87
88
+ QgsSymbolV2* symbol = firstSymbolForFeature ( mRenderer , feature );
89
+
90
+ // if the feature has no symbol (eg, no matching rule in a rule-based renderer), skip it
91
+ if ( !symbol )
92
+ return false ;
93
+
88
94
// point position in screen coords
89
95
QgsGeometry* geom = feature.geometry ();
90
96
QGis::WkbType geomType = geom->wkbType ();
@@ -103,7 +109,7 @@ bool QgsPointDisplacementRenderer::renderFeature( QgsFeature& feature, QgsRender
103
109
mSpatialIndex ->insertFeature ( feature );
104
110
// create new group
105
111
DisplacementGroup newGroup;
106
- newGroup.insert ( feature.id (), feature );
112
+ newGroup.insert ( feature.id (), qMakePair ( feature, symbol ) );
107
113
mDisplacementGroups .push_back ( newGroup );
108
114
// add to group index
109
115
mGroupIndex .insert ( feature.id (), mDisplacementGroups .count () - 1 );
@@ -117,15 +123,15 @@ bool QgsPointDisplacementRenderer::renderFeature( QgsFeature& feature, QgsRender
117
123
DisplacementGroup& group = mDisplacementGroups [groupIdx];
118
124
119
125
// add to a group
120
- group.insert ( feature.id (), feature );
126
+ group.insert ( feature.id (), qMakePair ( feature, symbol ) );
121
127
// add to group index
122
128
mGroupIndex .insert ( feature.id (), groupIdx );
123
129
return true ;
124
130
}
125
131
126
132
void QgsPointDisplacementRenderer::drawGroup ( const DisplacementGroup& group, QgsRenderContext& context )
127
133
{
128
- const QgsFeature& feature = group.begin ().value ();
134
+ const QgsFeature& feature = group.begin ().value (). first ;
129
135
bool selected = mSelectedFeatures .contains ( feature.id () ); // maybe we should highlight individual features instead of the whole group?
130
136
131
137
QPointF pt;
@@ -137,9 +143,8 @@ void QgsPointDisplacementRenderer::drawGroup( const DisplacementGroup& group, Qg
137
143
138
144
for ( DisplacementGroup::const_iterator attIt = group.constBegin (); attIt != group.constEnd (); ++attIt )
139
145
{
140
- labelAttributeList << ( mDrawLabels ? getLabel ( attIt.value () ) : QString () );
141
- QgsFeature& f = const_cast <QgsFeature&>( attIt.value () ); // other parts of API use non-const ref to QgsFeature :-/
142
- symbolList << dynamic_cast <QgsMarkerSymbolV2*>( firstSymbolForFeature ( mRenderer , f ) );
146
+ labelAttributeList << ( mDrawLabels ? getLabel ( attIt.value ().first ) : QString () );
147
+ symbolList << dynamic_cast <QgsMarkerSymbolV2*>( attIt.value ().second );
143
148
}
144
149
145
150
// draw symbol
@@ -413,7 +418,7 @@ void QgsPointDisplacementRenderer::printInfoDisplacementGroups()
413
418
for ( int i = 0 ; i < nGroups; ++i )
414
419
{
415
420
QgsDebugMsg ( " ***************displacement group " + QString::number ( i ) );
416
- QMap<QgsFeatureId, QgsFeature> ::const_iterator it = mDisplacementGroups .at ( i ).constBegin ();
421
+ DisplacementGroup ::const_iterator it = mDisplacementGroups .at ( i ).constBegin ();
417
422
for ( ; it != mDisplacementGroups .at ( i ).constEnd (); ++it )
418
423
{
419
424
QgsDebugMsg ( FID_TO_STRING ( it.key () ) );
0 commit comments