@@ -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