From bc79b89c5eab65d657e0ca101e0307b5bf41e4b9 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Thu, 6 Mar 2014 17:51:07 +0100 Subject: [PATCH] Limit shared segment editing To avoid surprises, we enable shared segment editing only on segments that have the same vertex coordinates. --- src/ol/interaction/modifyinteraction.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/ol/interaction/modifyinteraction.js b/src/ol/interaction/modifyinteraction.js index 532b797ff7..6296fc8748 100644 --- a/src/ol/interaction/modifyinteraction.js +++ b/src/ol/interaction/modifyinteraction.js @@ -510,26 +510,31 @@ ol.interaction.Modify.prototype.handleMouseAtPixel_ = function(pixel, map) { if (nodes.length > 0) { nodes.sort(sortByDistance); var node = nodes[0]; - var segment = node.segment; // the closest segment - var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate, segment)); + var closestSegment = node.segment; + var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate, + closestSegment)); var vertexPixel = map.getPixelFromCoordinate(vertex); if (Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <= this.pixelTolerance_) { - var pixel1 = map.getPixelFromCoordinate(segment[0]); - var pixel2 = map.getPixelFromCoordinate(segment[1]); + var pixel1 = map.getPixelFromCoordinate(closestSegment[0]); + var pixel2 = map.getPixelFromCoordinate(closestSegment[1]); var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1); var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2); var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2)); if (dist <= 10) { - vertex = squaredDist1 > squaredDist2 ? segment[1] : segment[0]; + vertex = squaredDist1 > squaredDist2 ? + closestSegment[1] : closestSegment[0]; } this.createOrUpdateVertexFeature_(vertex); var vertexSegments = {}; - vertexSegments[goog.getUid(segment)] = true; + vertexSegments[goog.getUid(closestSegment)] = true; + var segment; for (var i = 1, ii = nodes.length; i < ii; ++i) { segment = nodes[i].segment; - if (ol.coordinate.equals(vertex, - ol.coordinate.closestOnSegment(pixelCoordinate, segment))) { + if ((ol.coordinate.equals(closestSegment[0], segment[0]) && + ol.coordinate.equals(closestSegment[1], segment[1]) || + (ol.coordinate.equals(closestSegment[0], segment[1]) && + ol.coordinate.equals(closestSegment[1], segment[0])))) { vertexSegments[goog.getUid(segment)] = true; } else { break;