From 6a5c3bde6242a489c4c4337909111fe25b008c09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Kr=C3=B6g?= Date: Mon, 28 Sep 2020 16:43:28 +0200 Subject: [PATCH] Do not insert more than one point per geometry at once --- src/ol/interaction/Modify.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ol/interaction/Modify.js b/src/ol/interaction/Modify.js index 86aa1a07dd..f12d6685c0 100644 --- a/src/ol/interaction/Modify.js +++ b/src/ol/interaction/Modify.js @@ -1070,6 +1070,7 @@ class Modify extends PointerInteraction { if (dist <= this.pixelTolerance_) { /** @type {Object} */ const vertexSegments = {}; + vertexSegments[getUid(closestSegment)] = true; if ( node.geometry.getType() === GeometryType.CIRCLE && @@ -1091,14 +1092,18 @@ class Modify extends PointerInteraction { : closestSegment[0]; } this.createOrUpdateVertexFeature_(vertex); + const geometries = {}; + geometries[getUid(node.geometry)] = true; for (let i = 1, ii = nodes.length; i < ii; ++i) { const segment = nodes[i].segment; if ( - (coordinatesEqual(closestSegment[0], segment[0]) && + ((coordinatesEqual(closestSegment[0], segment[0]) && coordinatesEqual(closestSegment[1], segment[1])) || - (coordinatesEqual(closestSegment[0], segment[1]) && - coordinatesEqual(closestSegment[1], segment[0])) + (coordinatesEqual(closestSegment[0], segment[1]) && + coordinatesEqual(closestSegment[1], segment[0]))) && + !(getUid(nodes[i].geometry) in geometries) ) { + geometries[getUid(nodes[i].geometry)] = true; vertexSegments[getUid(segment)] = true; } else { break; @@ -1106,7 +1111,6 @@ class Modify extends PointerInteraction { } } - vertexSegments[getUid(closestSegment)] = true; this.vertexSegments_ = vertexSegments; return; }