@@ -1469,6 +1469,7 @@ bool QgsVectorLayer::addFeature( QgsFeature& f, bool alsoUpdateExtent )
1469
1469
// and add to the known added features.
1470
1470
f.setFeatureId ( addedIdLowWaterMark );
1471
1471
mAddedFeatures .append ( f );
1472
+ mCachedGeometries [f.id ()] = *(f.geometry ());
1472
1473
1473
1474
setModified ( true );
1474
1475
@@ -1502,6 +1503,7 @@ bool QgsVectorLayer::insertVertex( double x, double y, int atFeatureId, int befo
1502
1503
}
1503
1504
1504
1505
mChangedGeometries [atFeatureId].insertVertex ( x, y, beforeVertex );
1506
+ mCachedGeometries [atFeatureId] = mChangedGeometries [atFeatureId];
1505
1507
1506
1508
setModified ( true , true ); // only geometry was changed
1507
1509
@@ -1531,6 +1533,7 @@ bool QgsVectorLayer::moveVertex( double x, double y, int atFeatureId, int atVert
1531
1533
}
1532
1534
1533
1535
mChangedGeometries [atFeatureId].moveVertex ( x, y, atVertex );
1536
+ mCachedGeometries [atFeatureId] = mChangedGeometries [atFeatureId];
1534
1537
1535
1538
setModified ( true , true ); // only geometry was changed
1536
1539
@@ -1652,7 +1655,9 @@ int QgsVectorLayer::addIsland( const QList<QgsPoint>& ring )
1652
1655
QgsGeometryMap::iterator changedIt = mChangedGeometries .find ( selectedFeatureId );
1653
1656
if ( changedIt != mChangedGeometries .end () )
1654
1657
{
1655
- return changedIt->addIsland ( ring );
1658
+ int returnValue = changedIt->addIsland ( ring );
1659
+ mCachedGeometries [selectedFeatureId] = *changedIt;
1660
+ return returnValue;
1656
1661
}
1657
1662
1658
1663
// look if id of selected feature belongs to an added feature
@@ -1661,6 +1666,7 @@ int QgsVectorLayer::addIsland( const QList<QgsPoint>& ring )
1661
1666
if ( addedIt->id () == selectedFeatureId )
1662
1667
{
1663
1668
return addedIt->geometry ()->addIsland ( ring );
1669
+ mCachedGeometries [selectedFeatureId] = *(addedIt->geometry ());
1664
1670
}
1665
1671
}
1666
1672
@@ -1672,6 +1678,7 @@ int QgsVectorLayer::addIsland( const QList<QgsPoint>& ring )
1672
1678
if ( errorCode == 0 )
1673
1679
{
1674
1680
mChangedGeometries .insert ( selectedFeatureId, *cachedIt );
1681
+ mCachedGeometries [selectedFeatureId] = *cachedIt;
1675
1682
setModified ( true , true );
1676
1683
}
1677
1684
return errorCode;
@@ -2572,6 +2579,7 @@ bool QgsVectorLayer::changeGeometry(int fid, QgsGeometry* geom)
2572
2579
}
2573
2580
2574
2581
mChangedGeometries [ fid ] = *geom;
2582
+ mCachedGeometries [fid] = *geom;
2575
2583
setModified ( true , true );
2576
2584
return true ;
2577
2585
}
@@ -3236,7 +3244,7 @@ int QgsVectorLayer::snapWithContext( const QgsPoint& startPoint, double snapping
3236
3244
int n = 0 ;
3237
3245
QgsFeature f;
3238
3246
3239
- if ( mCachedGeometriesRect .contains ( searchRect ) )
3247
+ if (mCachedGeometriesRect .contains ( searchRect ) )
3240
3248
{
3241
3249
QgsDebugMsg ( " Using cached geometries for snapping." );
3242
3250
0 commit comments