Skip to content

Commit 49d103d

Browse files
author
jef
committed
fix #3246
git-svn-id: http://svn.osgeo.org/qgis/trunk@15004 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 54ee7c0 commit 49d103d

File tree

2 files changed

+36
-27
lines changed

2 files changed

+36
-27
lines changed

src/app/qgsmaptoolselectrectangle.cpp

+12-7
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,18 @@ void QgsMapToolSelectRectangle::canvasReleaseEvent( QMouseEvent * e )
8989
}
9090
}
9191

92-
QgsMapToolSelectUtils::setRubberBand( mCanvas, mSelectRect, mRubberBand );
93-
QgsGeometry* selectGeom = mRubberBand->asGeometry();
94-
QgsMapToolSelectUtils::setSelectFeatures( mCanvas, selectGeom, e );
95-
delete selectGeom;
92+
if ( mRubberBand )
93+
{
94+
QgsMapToolSelectUtils::setRubberBand( mCanvas, mSelectRect, mRubberBand );
95+
96+
QgsGeometry* selectGeom = mRubberBand->asGeometry();
97+
QgsMapToolSelectUtils::setSelectFeatures( mCanvas, selectGeom, e );
98+
delete selectGeom;
99+
100+
mRubberBand->reset( true );
101+
delete mRubberBand;
102+
mRubberBand = 0;
103+
}
96104

97-
mRubberBand->reset( true );
98-
delete mRubberBand;
99-
mRubberBand = 0;
100105
mDragging = false;
101106
}

src/app/qgsmaptoolselectutils.cpp

+24-20
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ email : jpalmer at linz dot govt dot nz
3333
QgsVectorLayer* 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

5963
void 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

Comments
 (0)