@@ -33,8 +33,8 @@ email : jpalmer at linz dot govt dot nz
33
33
QgsVectorLayer* QgsMapToolSelectUtils::getCurrentVectorLayer ( QgsMapCanvas* canvas )
34
34
{
35
35
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 )
38
38
{
39
39
QMessageBox::warning ( canvas, QObject::tr ( " No active vector layer" ),
40
40
QObject::tr ( " To select features, you must choose a "
@@ -49,19 +49,23 @@ void QgsMapToolSelectUtils::setRubberBand( QgsMapCanvas* canvas, QRect& selectRe
49
49
const QgsMapToPixel* transform = canvas->getCoordinateTransform ();
50
50
QgsPoint ll = transform->toMapCoordinates ( selectRect.left (), selectRect.bottom () );
51
51
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
+ }
57
61
}
58
62
59
63
void QgsMapToolSelectUtils::expandSelectRectangle ( QRect& selectRect,
60
64
QgsVectorLayer* vlayer,
61
65
QPoint point )
62
66
{
63
67
int boxSize = 0 ;
64
- if ( vlayer->geometryType () != QGis::Polygon )
68
+ if ( vlayer->geometryType () != QGis::Polygon )
65
69
{
66
70
// if point or line use an artificial bounding box of 10x10 pixels
67
71
// to aid the user to click on a feature accurately
@@ -84,12 +88,12 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
84
88
bool doDifference,
85
89
bool singleSelect )
86
90
{
87
- if ( selectGeometry->type () != QGis::Polygon )
91
+ if ( selectGeometry->type () != QGis::Polygon )
88
92
{
89
93
return ;
90
94
}
91
95
QgsVectorLayer* vlayer = QgsMapToolSelectUtils::getCurrentVectorLayer ( canvas );
92
- if ( vlayer == NULL )
96
+ if ( vlayer == NULL )
93
97
{
94
98
return ;
95
99
}
@@ -100,14 +104,14 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
100
104
// and then click somewhere off the globe, an exception will be thrown.
101
105
QgsGeometry selectGeomTrans ( *selectGeometry );
102
106
103
- if ( canvas->mapRenderer ()->hasCrsTransformEnabled () )
107
+ if ( canvas->mapRenderer ()->hasCrsTransformEnabled () )
104
108
{
105
109
try
106
110
{
107
111
QgsCoordinateTransform ct ( canvas->mapRenderer ()->destinationSrs (), vlayer->crs () );
108
112
selectGeomTrans.transform ( ct );
109
113
}
110
- catch ( QgsCsException &cse )
114
+ catch ( QgsCsException &cse )
111
115
{
112
116
Q_UNUSED ( cse );
113
117
// catch exception for 'invalid' point and leave existing selection unchanged
@@ -132,10 +136,10 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
132
136
int closestFeatureId = 0 ;
133
137
bool foundSingleFeature = false ;
134
138
double closestFeatureDist = std::numeric_limits<double >::max ();
135
- while ( vlayer->nextFeature ( f ) )
139
+ while ( vlayer->nextFeature ( f ) )
136
140
{
137
141
QgsGeometry* g = f.geometry ();
138
- if ( doContains )
142
+ if ( doContains )
139
143
{
140
144
if ( !selectGeomTrans.contains ( g ) )
141
145
continue ;
@@ -145,11 +149,11 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
145
149
if ( !selectGeomTrans.intersects ( g ) )
146
150
continue ;
147
151
}
148
- if ( singleSelect )
152
+ if ( singleSelect )
149
153
{
150
154
foundSingleFeature = true ;
151
155
double distance = g->distance ( selectGeomTrans );
152
- if ( distance <= closestFeatureDist )
156
+ if ( distance <= closestFeatureDist )
153
157
{
154
158
closestFeatureDist = distance;
155
159
closestFeatureId = f.id ();
@@ -160,22 +164,22 @@ void QgsMapToolSelectUtils::setSelectFeatures( QgsMapCanvas* canvas,
160
164
newSelectedFeatures.insert ( f.id () );
161
165
}
162
166
}
163
- if ( singleSelect && foundSingleFeature )
167
+ if ( singleSelect && foundSingleFeature )
164
168
{
165
169
newSelectedFeatures.insert ( closestFeatureId );
166
170
}
167
171
168
172
QgsDebugMsg ( " Number of new selected features: " + QString::number ( newSelectedFeatures.size () ) );
169
173
170
174
QgsFeatureIds layerSelectedFeatures;
171
- if ( doDifference )
175
+ if ( doDifference )
172
176
{
173
177
layerSelectedFeatures = vlayer->selectedFeaturesIds ();
174
178
QgsFeatureIds::const_iterator i = newSelectedFeatures.constEnd ();
175
- while ( i != newSelectedFeatures.constBegin () )
179
+ while ( i != newSelectedFeatures.constBegin () )
176
180
{
177
181
--i;
178
- if ( layerSelectedFeatures.contains ( *i ) )
182
+ if ( layerSelectedFeatures.contains ( *i ) )
179
183
{
180
184
layerSelectedFeatures.remove ( *i );
181
185
}
0 commit comments