From deec403e6db6d79170501a89d59810085c1cd83b Mon Sep 17 00:00:00 2001 From: mhugent Date: Thu, 14 May 2009 17:03:43 +0000 Subject: [PATCH] Keep mCachedGeometries up-to-date before the next repaint. This is important in cases where topological editing is enabled git-svn-id: http://svn.osgeo.org/qgis/trunk@10794 c8812cc2-4d05-0410-92ff-de0c093fc19c --- src/core/qgsvectorlayer.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp index 596394093bf..1203af6e7d9 100644 --- a/src/core/qgsvectorlayer.cpp +++ b/src/core/qgsvectorlayer.cpp @@ -1469,6 +1469,7 @@ bool QgsVectorLayer::addFeature( QgsFeature& f, bool alsoUpdateExtent ) // and add to the known added features. f.setFeatureId( addedIdLowWaterMark ); mAddedFeatures.append( f ); + mCachedGeometries[f.id()] = *(f.geometry()); setModified( true ); @@ -1502,6 +1503,7 @@ bool QgsVectorLayer::insertVertex( double x, double y, int atFeatureId, int befo } mChangedGeometries[atFeatureId].insertVertex( x, y, beforeVertex ); + mCachedGeometries[atFeatureId] = mChangedGeometries[atFeatureId]; setModified( true, true ); // only geometry was changed @@ -1531,6 +1533,7 @@ bool QgsVectorLayer::moveVertex( double x, double y, int atFeatureId, int atVert } mChangedGeometries[atFeatureId].moveVertex( x, y, atVertex ); + mCachedGeometries[atFeatureId] = mChangedGeometries[atFeatureId]; setModified( true, true ); // only geometry was changed @@ -1652,7 +1655,9 @@ int QgsVectorLayer::addIsland( const QList& ring ) QgsGeometryMap::iterator changedIt = mChangedGeometries.find( selectedFeatureId ); if ( changedIt != mChangedGeometries.end() ) { - return changedIt->addIsland( ring ); + int returnValue = changedIt->addIsland( ring ); + mCachedGeometries[selectedFeatureId] = *changedIt; + return returnValue; } //look if id of selected feature belongs to an added feature @@ -1661,6 +1666,7 @@ int QgsVectorLayer::addIsland( const QList& ring ) if ( addedIt->id() == selectedFeatureId ) { return addedIt->geometry()->addIsland( ring ); + mCachedGeometries[selectedFeatureId] = *(addedIt->geometry()); } } @@ -1672,6 +1678,7 @@ int QgsVectorLayer::addIsland( const QList& ring ) if ( errorCode == 0 ) { mChangedGeometries.insert( selectedFeatureId, *cachedIt ); + mCachedGeometries[selectedFeatureId] = *cachedIt; setModified( true, true ); } return errorCode; @@ -2572,6 +2579,7 @@ bool QgsVectorLayer::changeGeometry(int fid, QgsGeometry* geom) } mChangedGeometries[ fid ] = *geom; + mCachedGeometries[fid] = *geom; setModified( true, true ); return true; } @@ -3236,7 +3244,7 @@ int QgsVectorLayer::snapWithContext( const QgsPoint& startPoint, double snapping int n = 0; QgsFeature f; - if ( mCachedGeometriesRect.contains( searchRect ) ) + if (mCachedGeometriesRect.contains( searchRect ) ) { QgsDebugMsg( "Using cached geometries for snapping." );