Skip to content

Commit 0109880

Browse files
author
mhugent
committed
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/qgis@10794 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent daa89f3 commit 0109880

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

src/core/qgsvectorlayer.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -1469,6 +1469,7 @@ bool QgsVectorLayer::addFeature( QgsFeature& f, bool alsoUpdateExtent )
14691469
// and add to the known added features.
14701470
f.setFeatureId( addedIdLowWaterMark );
14711471
mAddedFeatures.append( f );
1472+
mCachedGeometries[f.id()] = *(f.geometry());
14721473

14731474
setModified( true );
14741475

@@ -1502,6 +1503,7 @@ bool QgsVectorLayer::insertVertex( double x, double y, int atFeatureId, int befo
15021503
}
15031504

15041505
mChangedGeometries[atFeatureId].insertVertex( x, y, beforeVertex );
1506+
mCachedGeometries[atFeatureId] = mChangedGeometries[atFeatureId];
15051507

15061508
setModified( true, true ); // only geometry was changed
15071509

@@ -1531,6 +1533,7 @@ bool QgsVectorLayer::moveVertex( double x, double y, int atFeatureId, int atVert
15311533
}
15321534

15331535
mChangedGeometries[atFeatureId].moveVertex( x, y, atVertex );
1536+
mCachedGeometries[atFeatureId] = mChangedGeometries[atFeatureId];
15341537

15351538
setModified( true, true ); // only geometry was changed
15361539

@@ -1652,7 +1655,9 @@ int QgsVectorLayer::addIsland( const QList<QgsPoint>& ring )
16521655
QgsGeometryMap::iterator changedIt = mChangedGeometries.find( selectedFeatureId );
16531656
if ( changedIt != mChangedGeometries.end() )
16541657
{
1655-
return changedIt->addIsland( ring );
1658+
int returnValue = changedIt->addIsland( ring );
1659+
mCachedGeometries[selectedFeatureId] = *changedIt;
1660+
return returnValue;
16561661
}
16571662

16581663
//look if id of selected feature belongs to an added feature
@@ -1661,6 +1666,7 @@ int QgsVectorLayer::addIsland( const QList<QgsPoint>& ring )
16611666
if ( addedIt->id() == selectedFeatureId )
16621667
{
16631668
return addedIt->geometry()->addIsland( ring );
1669+
mCachedGeometries[selectedFeatureId] = *(addedIt->geometry());
16641670
}
16651671
}
16661672

@@ -1672,6 +1678,7 @@ int QgsVectorLayer::addIsland( const QList<QgsPoint>& ring )
16721678
if ( errorCode == 0 )
16731679
{
16741680
mChangedGeometries.insert( selectedFeatureId, *cachedIt );
1681+
mCachedGeometries[selectedFeatureId] = *cachedIt;
16751682
setModified( true, true );
16761683
}
16771684
return errorCode;
@@ -2572,6 +2579,7 @@ bool QgsVectorLayer::changeGeometry(int fid, QgsGeometry* geom)
25722579
}
25732580

25742581
mChangedGeometries[ fid ] = *geom;
2582+
mCachedGeometries[fid] = *geom;
25752583
setModified( true, true );
25762584
return true;
25772585
}
@@ -3236,7 +3244,7 @@ int QgsVectorLayer::snapWithContext( const QgsPoint& startPoint, double snapping
32363244
int n = 0;
32373245
QgsFeature f;
32383246

3239-
if ( mCachedGeometriesRect.contains( searchRect ) )
3247+
if (mCachedGeometriesRect.contains( searchRect ) )
32403248
{
32413249
QgsDebugMsg( "Using cached geometries for snapping." );
32423250

0 commit comments

Comments
 (0)