From 26b8b8789e1415c0e3adca277deb2131c929ca28 Mon Sep 17 00:00:00 2001 From: Dr Ian Date: Sun, 3 Feb 2013 00:05:11 +0100 Subject: [PATCH] Fix case where parentnodes present --- js/id/actions/orthogonalize.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/js/id/actions/orthogonalize.js b/js/id/actions/orthogonalize.js index c0a9d64ed..80c6a12c8 100644 --- a/js/id/actions/orthogonalize.js +++ b/js/id/actions/orthogonalize.js @@ -19,7 +19,7 @@ iD.actions.Orthogonalize = function(wayId, map) { } var newScore = squareness(); if (newScore > score) { - return false; + return graph; } score = newScore; if (score < 1.0e-8) { @@ -31,8 +31,22 @@ iD.actions.Orthogonalize = function(wayId, map) { } quad_nodes.push(quad_nodes[0]); - for (var i = 0; i < nodes.length; i++) { + for (i = 0; i < nodes.length; i++) { + if (graph.parentWays(nodes[i]).length > 1) { + var closest, closest_dist = Infinity, dist; + for (var j = 0; j < quad_nodes.length; j++) { + dist = iD.geo.dist(quad_nodes[j].loc, nodes[i].loc); + if (dist < closest_dist) { + closest_dist = dist; + closest = j; + } + } + quad_nodes.splice(closest, 1, nodes[i]); + if (closest === 0) quad_nodes.splice(quad_nodes.length - 1, 1, nodes[i]); + else if (closest === quad_nodes.length - 1) quad_nodes.splice(0, 1, nodes[i]); + } else { graph = graph.remove(nodes[i]); + } } for (var i = 0; i < quad_nodes.length; i++) {