Skip to content

Commit 213b2b9

Browse files
author
mhugent
committed
some bugfixes for multipolygon vertex editing
git-svn-id: http://svn.osgeo.org/qgis/trunk@5485 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 79a2319 commit 213b2b9

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/core/qgsgeometry.cpp

+14-3
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ QgsPoint QgsGeometry::closestVertex(const QgsPoint& point, QgsGeometryVertexInde
349349
ptr+=sizeof(int);
350350
for(int index=0;index<*npolys;++index)
351351
{
352+
ptr += (1 + sizeof(int)); //skip endian and polygon type
352353
nrings=(int*)ptr;
353354
ptr+=sizeof(int);
354355
for(int index2=0;index2<*nrings;++index2)
@@ -559,6 +560,7 @@ bool QgsGeometry::moveVertexAt(double x, double y, QgsGeometryVertexIndex atVert
559560

560561
for(int polynr = 0; polynr < *nrPolygons; ++polynr)
561562
{
563+
ptr += (1 + sizeof(int)); //skip endian and polygon type
562564
nrRings = (int*)ptr;
563565
ptr += sizeof(int);
564566
for(int ringnr = 0; ringnr< *nrRings; ++ringnr)
@@ -771,6 +773,9 @@ bool QgsGeometry::deleteVertexAt(QgsGeometryVertexIndex atVertex)
771773

772774
for(int polynr = 0; polynr < *nPolys; ++polynr)
773775
{
776+
memcpy(newBufferPtr, ptr, (1 + sizeof(int)));
777+
ptr += (1 + sizeof(int)); //skip endian and polygon type
778+
newBufferPtr += (1 + sizeof(int));
774779
nRings = (int*)ptr;
775780
memcpy(newBufferPtr, nRings, sizeof(int));
776781
newBufferPtr += sizeof(int);
@@ -994,18 +999,21 @@ bool QgsGeometry::insertVertexBefore(double x, double y, QgsGeometryVertexIndex
994999
case QGis::WKBMultiPolygon:
9951000
{
9961001
int* nPolys = (int*)ptr;
997-
ptr += sizeof(int);
9981002
int* nRings = 0; //number of rings in a polygon
9991003
int* nPoints = 0; //number of points in a ring
1000-
memcpy(newBufferPtr, &nPolys, sizeof(int));
1004+
memcpy(newBufferPtr, nPolys, sizeof(int));
1005+
ptr += sizeof(int);
10011006
newBufferPtr += sizeof(int);
10021007
int pointindex = 0;
10031008

10041009
for(int polynr = 0; polynr < *nPolys; ++polynr)
10051010
{
1011+
memcpy(newBufferPtr, ptr, (1 + sizeof(int)));
1012+
ptr += (1 + sizeof(int));//skip endian and polygon type
1013+
newBufferPtr += (1 + sizeof(int));
10061014
nRings = (int*)ptr;
10071015
ptr += sizeof(int);
1008-
memcpy(newBufferPtr, &nRings, sizeof(int));
1016+
memcpy(newBufferPtr, nRings, sizeof(int));
10091017
newBufferPtr += sizeof(int);
10101018

10111019
for(int ringnr = 0; ringnr < *nRings; ++ringnr)
@@ -1198,6 +1206,7 @@ bool QgsGeometry::vertexAt(double &x, double &y,
11981206
ptr += sizeof(int);
11991207
for(int polynr = 0; polynr < *nPolygons; ++polynr)
12001208
{
1209+
ptr += (1 + sizeof(int)); //skip endian and polygon type
12011210
nRings = (int*)ptr;
12021211
ptr += sizeof(int);
12031212
for(int ringnr = 0; ringnr < *nRings; ++ringnr)
@@ -1422,11 +1431,13 @@ QgsPoint QgsGeometry::closestSegmentWithContext(QgsPoint& point,
14221431
ptr += sizeof(int);
14231432
for(int polynr = 0; polynr < *nPolygons; ++polynr)
14241433
{
1434+
ptr += (1 + sizeof(int));
14251435
nRings = (int*)ptr;
14261436
ptr += sizeof(int);
14271437
for(int ringnr = 0; ringnr < *nRings; ++ringnr)
14281438
{
14291439
nPoints = (int*)ptr;
1440+
ptr += sizeof(int);
14301441
prevx = 0;
14311442
prevy = 0;
14321443
for(int pointnr = 0; pointnr < *nPoints; ++pointnr)

0 commit comments

Comments
 (0)