@@ -33,8 +33,8 @@ email : jpalmer at linz dot govt dot nz
3333QgsVectorLayer* QgsMapToolSelectUtils::getCurrentVectorLayer ( QgsMapCanvas* canvas )
3434{
3535 QgsVectorLayer* vlayer = NULL ;
36- if ( !canvas->currentLayer ()
37- || ( vlayer = qobject_cast<QgsVectorLayer *>( canvas->currentLayer () ) ) == NULL )
36+ if ( !canvas->currentLayer ()
37+ || ( vlayer = qobject_cast<QgsVectorLayer *>( canvas->currentLayer () ) ) == NULL )
3838 {
3939 QMessageBox::warning ( canvas, QObject::tr ( " No active vector layer" ),
4040 QObject::tr ( " To select features, you must choose a "
@@ -49,19 +49,23 @@ void QgsMapToolSelectUtils::setRubberBand( QgsMapCanvas* canvas, QRect& selectRe
4949 const QgsMapToPixel* transform = canvas->getCoordinateTransform ();
5050 QgsPoint ll = transform->toMapCoordinates ( selectRect.left (), selectRect.bottom () );
5151 QgsPoint ur = transform->toMapCoordinates ( selectRect.right (), selectRect.top () );
52- rubberBand->reset ( true );
53- rubberBand->addPoint ( ll, false );
54- rubberBand->addPoint ( QgsPoint ( ur.x (), ll.y () ), false );
55- rubberBand->addPoint ( ur, false );
56- rubberBand->addPoint ( QgsPoint ( ll.x (), ur.y () ), true );
52+
53+ if ( rubberBand )
54+ {
55+ rubberBand->reset ( true );
56+ rubberBand->addPoint ( ll, false );
57+ rubberBand->addPoint ( QgsPoint ( ur.x (), ll.y () ), false );
58+ rubberBand->addPoint ( ur, false );
59+ rubberBand->addPoint ( QgsPoint ( ll.x (), ur.y () ), true );
60+ }
5761}
5862
5963void QgsMapToolSelectUtils::expandSelectRectangle ( QRect& selectRect,
6064 QgsVectorLayer* vlayer,
6165 QPoint point )
6266{
6367 int boxSize = 0 ;
64- if ( vlayer->geometryType () != QGis::Polygon )
68+ if ( vlayer->geometryType () != QGis::Polygon )
6569 {
6670 // if point or line use an artificial bounding box of 10x10 pixels
6771 // to aid the user to click on a feature accurately
@@ -84,12 +88,12 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
8488 bool doDifference,
8589 bool singleSelect )
8690{
87- if ( selectGeometry->type () != QGis::Polygon )
91+ if ( selectGeometry->type () != QGis::Polygon )
8892 {
8993 return ;
9094 }
9195 QgsVectorLayer* vlayer = QgsMapToolSelectUtils::getCurrentVectorLayer ( canvas );
92- if ( vlayer == NULL )
96+ if ( vlayer == NULL )
9397 {
9498 return ;
9599 }
@@ -100,14 +104,14 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
100104 // and then click somewhere off the globe, an exception will be thrown.
101105 QgsGeometry selectGeomTrans ( *selectGeometry );
102106
103- if ( canvas->mapRenderer ()->hasCrsTransformEnabled () )
107+ if ( canvas->mapRenderer ()->hasCrsTransformEnabled () )
104108 {
105109 try
106110 {
107111 QgsCoordinateTransform ct ( canvas->mapRenderer ()->destinationSrs (), vlayer->crs () );
108112 selectGeomTrans.transform ( ct );
109113 }
110- catch ( QgsCsException &cse )
114+ catch ( QgsCsException &cse )
111115 {
112116 Q_UNUSED ( cse );
113117 // catch exception for 'invalid' point and leave existing selection unchanged
@@ -132,10 +136,10 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
132136 int closestFeatureId = 0 ;
133137 bool foundSingleFeature = false ;
134138 double closestFeatureDist = std::numeric_limits<double >::max ();
135- while ( vlayer->nextFeature ( f ) )
139+ while ( vlayer->nextFeature ( f ) )
136140 {
137141 QgsGeometry* g = f.geometry ();
138- if ( doContains )
142+ if ( doContains )
139143 {
140144 if ( !selectGeomTrans.contains ( g ) )
141145 continue ;
@@ -145,11 +149,11 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
145149 if ( !selectGeomTrans.intersects ( g ) )
146150 continue ;
147151 }
148- if ( singleSelect )
152+ if ( singleSelect )
149153 {
150154 foundSingleFeature = true ;
151155 double distance = g->distance ( selectGeomTrans );
152- if ( distance <= closestFeatureDist )
156+ if ( distance <= closestFeatureDist )
153157 {
154158 closestFeatureDist = distance;
155159 closestFeatureId = f.id ();
@@ -160,22 +164,22 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
160164 newSelectedFeatures.insert ( f.id () );
161165 }
162166 }
163- if ( singleSelect && foundSingleFeature )
167+ if ( singleSelect && foundSingleFeature )
164168 {
165169 newSelectedFeatures.insert ( closestFeatureId );
166170 }
167171
168172 QgsDebugMsg ( " Number of new selected features: " + QString::number ( newSelectedFeatures.size () ) );
169173
170174 QgsFeatureIds layerSelectedFeatures;
171- if ( doDifference )
175+ if ( doDifference )
172176 {
173177 layerSelectedFeatures = vlayer->selectedFeaturesIds ();
174178 QgsFeatureIds::const_iterator i = newSelectedFeatures.constEnd ();
175- while ( i != newSelectedFeatures.constBegin () )
179+ while ( i != newSelectedFeatures.constBegin () )
176180 {
177181 --i;
178- if ( layerSelectedFeatures.contains ( *i ) )
182+ if ( layerSelectedFeatures.contains ( *i ) )
179183 {
180184 layerSelectedFeatures.remove ( *i );
181185 }
0 commit comments