[QGIS Commit] r15004 - trunk/qgis/src/app
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Fri Jan 7 11:56:07 EST 2011
Author: jef
Date: 2011-01-07 08:56:07 -0800 (Fri, 07 Jan 2011)
New Revision: 15004
Modified:
trunk/qgis/src/app/qgsmaptoolselectrectangle.cpp
trunk/qgis/src/app/qgsmaptoolselectutils.cpp
Log:
fix #3246
Modified: trunk/qgis/src/app/qgsmaptoolselectrectangle.cpp
===================================================================
--- trunk/qgis/src/app/qgsmaptoolselectrectangle.cpp 2011-01-06 16:37:09 UTC (rev 15003)
+++ trunk/qgis/src/app/qgsmaptoolselectrectangle.cpp 2011-01-07 16:56:07 UTC (rev 15004)
@@ -89,13 +89,18 @@
}
}
- QgsMapToolSelectUtils::setRubberBand( mCanvas, mSelectRect, mRubberBand );
- QgsGeometry* selectGeom = mRubberBand->asGeometry();
- QgsMapToolSelectUtils::setSelectFeatures( mCanvas, selectGeom, e );
- delete selectGeom;
+ if ( mRubberBand )
+ {
+ QgsMapToolSelectUtils::setRubberBand( mCanvas, mSelectRect, mRubberBand );
- mRubberBand->reset( true );
- delete mRubberBand;
- mRubberBand = 0;
+ QgsGeometry* selectGeom = mRubberBand->asGeometry();
+ QgsMapToolSelectUtils::setSelectFeatures( mCanvas, selectGeom, e );
+ delete selectGeom;
+
+ mRubberBand->reset( true );
+ delete mRubberBand;
+ mRubberBand = 0;
+ }
+
mDragging = false;
}
Modified: trunk/qgis/src/app/qgsmaptoolselectutils.cpp
===================================================================
--- trunk/qgis/src/app/qgsmaptoolselectutils.cpp 2011-01-06 16:37:09 UTC (rev 15003)
+++ trunk/qgis/src/app/qgsmaptoolselectutils.cpp 2011-01-07 16:56:07 UTC (rev 15004)
@@ -33,8 +33,8 @@
QgsVectorLayer* QgsMapToolSelectUtils::getCurrentVectorLayer( QgsMapCanvas* canvas )
{
QgsVectorLayer* vlayer = NULL;
- if( !canvas->currentLayer()
- || ( vlayer = qobject_cast<QgsVectorLayer *>( canvas->currentLayer() ) ) == NULL )
+ if ( !canvas->currentLayer()
+ || ( vlayer = qobject_cast<QgsVectorLayer *>( canvas->currentLayer() ) ) == NULL )
{
QMessageBox::warning( canvas, QObject::tr( "No active vector layer" ),
QObject::tr( "To select features, you must choose a "
@@ -49,11 +49,15 @@
const QgsMapToPixel* transform = canvas->getCoordinateTransform();
QgsPoint ll = transform->toMapCoordinates( selectRect.left(), selectRect.bottom() );
QgsPoint ur = transform->toMapCoordinates( selectRect.right(), selectRect.top() );
- rubberBand->reset( true );
- rubberBand->addPoint( ll, false );
- rubberBand->addPoint( QgsPoint( ur.x(), ll.y() ), false );
- rubberBand->addPoint( ur, false );
- rubberBand->addPoint( QgsPoint( ll.x(), ur.y() ), true );
+
+ if ( rubberBand )
+ {
+ rubberBand->reset( true );
+ rubberBand->addPoint( ll, false );
+ rubberBand->addPoint( QgsPoint( ur.x(), ll.y() ), false );
+ rubberBand->addPoint( ur, false );
+ rubberBand->addPoint( QgsPoint( ll.x(), ur.y() ), true );
+ }
}
void QgsMapToolSelectUtils::expandSelectRectangle( QRect& selectRect,
@@ -61,7 +65,7 @@
QPoint point )
{
int boxSize = 0;
- if( vlayer->geometryType() != QGis::Polygon )
+ if ( vlayer->geometryType() != QGis::Polygon )
{
//if point or line use an artificial bounding box of 10x10 pixels
//to aid the user to click on a feature accurately
@@ -84,12 +88,12 @@
bool doDifference,
bool singleSelect )
{
- if( selectGeometry->type() != QGis::Polygon )
+ if ( selectGeometry->type() != QGis::Polygon )
{
return;
}
QgsVectorLayer* vlayer = QgsMapToolSelectUtils::getCurrentVectorLayer( canvas );
- if( vlayer == NULL )
+ if ( vlayer == NULL )
{
return;
}
@@ -100,14 +104,14 @@
// and then click somewhere off the globe, an exception will be thrown.
QgsGeometry selectGeomTrans( *selectGeometry );
- if( canvas->mapRenderer()->hasCrsTransformEnabled() )
+ if ( canvas->mapRenderer()->hasCrsTransformEnabled() )
{
try
{
QgsCoordinateTransform ct( canvas->mapRenderer()->destinationSrs(), vlayer->crs() );
selectGeomTrans.transform( ct );
}
- catch( QgsCsException &cse )
+ catch ( QgsCsException &cse )
{
Q_UNUSED( cse );
// catch exception for 'invalid' point and leave existing selection unchanged
@@ -132,10 +136,10 @@
int closestFeatureId = 0;
bool foundSingleFeature = false;
double closestFeatureDist = std::numeric_limits<double>::max();
- while( vlayer->nextFeature( f ) )
+ while ( vlayer->nextFeature( f ) )
{
QgsGeometry* g = f.geometry();
- if( doContains )
+ if ( doContains )
{
if ( !selectGeomTrans.contains( g ) )
continue;
@@ -145,11 +149,11 @@
if ( !selectGeomTrans.intersects( g ) )
continue;
}
- if( singleSelect )
+ if ( singleSelect )
{
foundSingleFeature = true;
double distance = g->distance( selectGeomTrans );
- if( distance <= closestFeatureDist )
+ if ( distance <= closestFeatureDist )
{
closestFeatureDist = distance;
closestFeatureId = f.id();
@@ -160,7 +164,7 @@
newSelectedFeatures.insert( f.id() );
}
}
- if( singleSelect && foundSingleFeature )
+ if ( singleSelect && foundSingleFeature )
{
newSelectedFeatures.insert( closestFeatureId );
}
@@ -168,14 +172,14 @@
QgsDebugMsg( "Number of new selected features: " + QString::number( newSelectedFeatures.size() ) );
QgsFeatureIds layerSelectedFeatures;
- if( doDifference )
+ if ( doDifference )
{
layerSelectedFeatures = vlayer->selectedFeaturesIds();
QgsFeatureIds::const_iterator i = newSelectedFeatures.constEnd();
- while( i != newSelectedFeatures.constBegin() )
+ while ( i != newSelectedFeatures.constBegin() )
{
--i;
- if( layerSelectedFeatures.contains( *i ) )
+ if ( layerSelectedFeatures.contains( *i ) )
{
layerSelectedFeatures.remove( *i );
}
More information about the QGIS-commit
mailing list