@@ -22,6 +22,7 @@ email : jpalmer at linz dot govt dot nz
2222#include " qgsvectorlayer.h"
2323#include " qgsfeature.h"
2424#include " qgsgeometry.h"
25+ #include " qgsrendererv2.h"
2526#include " qgsrubberband.h"
2627#include " qgscsexception.h"
2728#include " qgslogger.h"
@@ -135,7 +136,20 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
135136 QgsDebugMsg ( " doContains: " + QString ( doContains ? " T" : " F" ) );
136137 QgsDebugMsg ( " doDifference: " + QString ( doDifference ? " T" : " F" ) );
137138
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 );
139153
140154 QgsFeatureIds newSelectedFeatures;
141155 QgsFeature f;
@@ -144,6 +158,10 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
144158 double closestFeatureDist = std::numeric_limits<double >::max ();
145159 while ( fit.nextFeature ( f ) )
146160 {
161+ // make sure to only use features that are visible
162+ if ( r && !r->willRenderFeature ( f ) )
163+ continue ;
164+
147165 QgsGeometry* g = f.geometry ();
148166 if ( doContains )
149167 {
@@ -175,6 +193,9 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
175193 newSelectedFeatures.insert ( closestFeatureId );
176194 }
177195
196+ if ( r )
197+ r->stopRender ( context );
198+
178199 QgsDebugMsg ( " Number of new selected features: " + QString::number ( newSelectedFeatures.size () ) );
179200
180201 if ( doDifference )
0 commit comments