Skip to content

Commit c245c64

Browse files
author
wonder
committed
Added changeGeometry() method as have been suggested on mailing list.
git-svn-id: http://svn.osgeo.org/qgis/trunk@10701 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent cbc57dc commit c245c64

6 files changed

+26
-7
lines changed

python/core/qgsvectorlayer.sip

+4
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,10 @@ public:
316316
/** Make layer editable */
317317
bool startEditing();
318318

319+
/** change feature's geometry
320+
@note added in version 1.2 */
321+
bool changeGeometry(int fid, QgsGeometry* geom);
322+
319323
/** changed an attribute value (but does not commit it */
320324
bool changeAttributeValue(int fid, int field, QVariant value, bool emitSignal = true);
321325

src/app/qgsmaptooldeletehole.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,7 @@ void QgsMapToolDeleteHole::deleteHole( int fId, int beforeVertexNr, QgsVectorLay
111111

112112
if (g->deleteHole( ringNum, partNum ))
113113
{
114-
vlayer->deleteFeature( fId );
115-
vlayer->addFeature(f);
114+
vlayer->changeGeometry( fId, g );
116115
mCanvas->refresh();
117116
}
118117

src/app/qgsmaptooldeletepart.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,7 @@ void QgsMapToolDeletePart::deletePart( int fId, int beforeVertexNr, QgsVectorLay
106106

107107
if (g->deletePart( partNum ))
108108
{
109-
vlayer->deleteFeature( fId );
110-
vlayer->addFeature(f);
109+
vlayer->changeGeometry( fId, g );
111110
mCanvas->refresh();
112111
}
113112
else

src/app/qgsmaptoolsimplify.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,8 @@ void QgsMapToolSimplify::storeSimplified()
9090
{
9191
QgsVectorLayer * vlayer = currentVectorLayer();
9292
QgsSimplifyFeature::simplifyLine(mSelectedFeature, mTolerance);
93-
// TODO(md): change geometry of feature instead of delete+add
94-
vlayer->deleteFeature( mSelectedFeature.id() );
95-
vlayer->addFeature(mSelectedFeature);
93+
94+
vlayer->changeGeometry( mSelectedFeature.id(), mSelectedFeature.geometry() );
9695

9796
mCanvas->refresh();
9897
}

src/core/qgsvectorlayer.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -2553,6 +2553,20 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
25532553
return true;
25542554
}
25552555

2556+
2557+
bool QgsVectorLayer::changeGeometry(int fid, QgsGeometry* geom)
2558+
{
2559+
if ( !mEditable || !mDataProvider )
2560+
{
2561+
return false;
2562+
}
2563+
2564+
mChangedGeometries[ fid ] = *geom;
2565+
setModified( true, true );
2566+
return true;
2567+
}
2568+
2569+
25562570
bool QgsVectorLayer::changeAttributeValue( int fid, int field, QVariant value, bool emitSignal )
25572571
{
25582572
if ( !isEditable() )

src/core/qgsvectorlayer.h

+4
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,10 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
378378
/** Make layer editable */
379379
bool startEditing();
380380

381+
/** change feature's geometry
382+
@note added in version 1.2 */
383+
bool changeGeometry(int fid, QgsGeometry* geom);
384+
381385
/** changed an attribute value (but does not commit it) */
382386
bool changeAttributeValue( int fid, int field, QVariant value, bool emitSignal = true );
383387

0 commit comments

Comments
 (0)