Skip to content

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
 

‎src/core/qgsgeometry.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,8 @@ bool QgsGeometry::deleteVertexAt(QgsGeometryVertexIndex atVertex)
642642
int pointindex = 0;
643643
for(int linenr = 0; linenr < *nLines; ++linenr)
644644
{
645+
ptr += (sizeof(int) + 1);
646+
newBufferPtr += (sizeof(int) + 1);
645647
nPoints = (int*)ptr;
646648
ptr += sizeof(int);
647649
int newNPoint;
@@ -660,6 +662,7 @@ bool QgsGeometry::deleteVertexAt(QgsGeometryVertexIndex atVertex)
660662
newNPoint = *nPoints;
661663
}
662664
memcpy(newBufferPtr, &newNPoint, sizeof(int));
665+
newBufferPtr += sizeof(int);
663666

664667
for(int pointnr = 0; pointnr < *nPoints; ++pointnr)
665668
{
@@ -873,6 +876,47 @@ bool QgsGeometry::insertVertexBefore(double x, double y, QgsGeometryVertexIndex
873876
}
874877
case QGis::WKBMultiLineString:
875878
{
879+
int* nLines = (int*)ptr;
880+
int* nPoints = 0; //number of points in a line
881+
ptr += sizeof(int);
882+
memcpy(newBufferPtr, nLines, sizeof(int));
883+
newBufferPtr += sizeof(int);
884+
int pointindex = 0;
885+
886+
for(int linenr = 0; linenr < *nLines; ++linenr)
887+
{
888+
ptr += (sizeof(int) + 1);
889+
newBufferPtr += (sizeof(int) + 1);
890+
nPoints = (int*)ptr;
891+
int newNPoints;
892+
if(vertexnr >= pointindex && vertexnr < (pointindex + (*nPoints)))//point is in this ring
893+
{
894+
newNPoints = (*nPoints)+1;
895+
}
896+
else
897+
{
898+
newNPoints = *nPoints;
899+
}
900+
memcpy(newBufferPtr, &newNPoints, sizeof(double));
901+
newBufferPtr += sizeof(int);
902+
ptr += sizeof(int);
903+
904+
for(int pointnr = 0; pointnr < *nPoints; ++pointnr)
905+
{
906+
memcpy(newBufferPtr, ptr, sizeof(double));//x
907+
memcpy(newBufferPtr+sizeof(double), ptr+sizeof(double), sizeof(double));//y
908+
ptr += 2*sizeof(double);
909+
newBufferPtr += 2*sizeof(double);
910+
++pointindex;
911+
if(pointindex == vertexnr)
912+
{
913+
memcpy(newBufferPtr, &x, sizeof(double));
914+
memcpy(newBufferPtr+sizeof(double), &y, sizeof(double));
915+
newBufferPtr += 2*sizeof(double);
916+
success = true;
917+
}
918+
}
919+
}
876920
break;
877921
}
878922
case QGis::WKBPolygon:

0 commit comments

Comments
 (0)
Please sign in to comment.