@@ -22,6 +22,7 @@ email : jpalmer at linz dot govt dot nz
22
22
#include " qgsvectorlayer.h"
23
23
#include " qgsfeature.h"
24
24
#include " qgsgeometry.h"
25
+ #include " qgsrendererv2.h"
25
26
#include " qgsrubberband.h"
26
27
#include " qgscsexception.h"
27
28
#include " qgslogger.h"
@@ -135,7 +136,20 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
135
136
QgsDebugMsg ( " doContains: " + QString ( doContains ? " T" : " F" ) );
136
137
QgsDebugMsg ( " doDifference: " + QString ( doDifference ? " T" : " F" ) );
137
138
138
- QgsFeatureIterator fit = vlayer->getFeatures ( QgsFeatureRequest ().setFilterRect ( selectGeomTrans.boundingBox () ).setFlags ( QgsFeatureRequest::ExactIntersect ).setSubsetOfAttributes ( QgsAttributeList () ) );
139
+ QgsRenderContext context = QgsRenderContext::fromMapSettings ( canvas->mapSettings () );
140
+ QgsFeatureRendererV2* r = vlayer->rendererV2 ();
141
+ if ( r )
142
+ r->startRender ( context, vlayer->pendingFields () );
143
+
144
+ QgsFeatureRequest request;
145
+ request.setFilterRect ( selectGeomTrans.boundingBox () );
146
+ request.setFlags ( QgsFeatureRequest::ExactIntersect );
147
+ if ( r )
148
+ request.setSubsetOfAttributes ( r->usedAttributes (), vlayer->pendingFields () );
149
+ else
150
+ request.setSubsetOfAttributes ( QgsAttributeList () );
151
+
152
+ QgsFeatureIterator fit = vlayer->getFeatures ( request );
139
153
140
154
QgsFeatureIds newSelectedFeatures;
141
155
QgsFeature f;
@@ -144,6 +158,10 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
144
158
double closestFeatureDist = std::numeric_limits<double >::max ();
145
159
while ( fit.nextFeature ( f ) )
146
160
{
161
+ // make sure to only use features that are visible
162
+ if ( r && !r->willRenderFeature ( f ) )
163
+ continue ;
164
+
147
165
QgsGeometry* g = f.geometry ();
148
166
if ( doContains )
149
167
{
@@ -175,6 +193,9 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
175
193
newSelectedFeatures.insert ( closestFeatureId );
176
194
}
177
195
196
+ if ( r )
197
+ r->stopRender ( context );
198
+
178
199
QgsDebugMsg ( " Number of new selected features: " + QString::number ( newSelectedFeatures.size () ) );
179
200
180
201
if ( doDifference )
0 commit comments