Skip to content

Commit 4739841

Browse files
author
mhugent
committed
insertVertex for multipolygons. Not tested yet
git-svn-id: http://svn.osgeo.org/qgis/trunk@5360 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent bd1caa4 commit 4739841

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

src/core/qgsgeometry.cpp

+50-1
Original file line numberDiff line numberDiff line change
@@ -1003,10 +1003,59 @@ bool QgsGeometry::insertVertexBefore(double x, double y, QgsGeometryVertexIndex
10031003
}
10041004
case QGis::WKBMultiPolygon:
10051005
{
1006+
int* nPolys = (int*)ptr;
1007+
ptr += sizeof(int);
1008+
int* nRings = 0; //number of rings in a polygon
1009+
int* nPoints = 0; //number of points in a ring
1010+
memcpy(newBufferPtr, &nPolys, sizeof(int));
1011+
newBufferPtr += sizeof(int);
1012+
int pointindex = 0;
1013+
1014+
for(int polynr = 0; polynr < *nPolys; ++polynr)
1015+
{
1016+
nRings = (int*)ptr;
1017+
ptr += sizeof(int);
1018+
memcpy(newBufferPtr, &nRings, sizeof(int));
1019+
newBufferPtr += sizeof(int);
1020+
1021+
for(int ringnr = 0; ringnr < *nRings; ++ringnr)
1022+
{
1023+
nPoints = (int*)ptr;
1024+
int newNPoints;
1025+
if(vertexnr >= pointindex && vertexnr < (pointindex + (*nPoints)))//point is in this ring
1026+
{
1027+
newNPoints = (*nPoints)+1;
1028+
}
1029+
else
1030+
{
1031+
newNPoints = *nPoints;
1032+
}
1033+
memcpy(newBufferPtr, &newNPoints, sizeof(double));
1034+
newBufferPtr += sizeof(int);
1035+
ptr += sizeof(int);
1036+
1037+
for(int pointnr = 0; pointnr < *nPoints; ++pointnr)
1038+
{
1039+
memcpy(newBufferPtr, ptr, sizeof(double));//x
1040+
memcpy(newBufferPtr+sizeof(double), ptr+sizeof(double), sizeof(double));//y
1041+
ptr += 2*sizeof(double);
1042+
newBufferPtr += 2*sizeof(double);
1043+
++pointindex;
1044+
if(pointindex == vertexnr)
1045+
{
1046+
memcpy(newBufferPtr, &x, sizeof(double));
1047+
memcpy(newBufferPtr+sizeof(double), &y, sizeof(double));
1048+
newBufferPtr += 2*sizeof(double);
1049+
success = true;
1050+
}
1051+
}
1052+
}
1053+
1054+
}
10061055
break;
10071056
}
10081057
}
1009-
1058+
10101059
if(success)
10111060
{
10121061
delete mGeometry;

0 commit comments

Comments
 (0)