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