From d778016571dbda18074b5e1e7ecc8251073e5e16 Mon Sep 17 00:00:00 2001 From: Devin Howard Date: Sun, 7 Aug 2016 13:17:25 +0800 Subject: [PATCH] fix selection box on radial view - fix #463 --- app/assets/javascripts/src/Metamaps.JIT.js | 35 +++++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/src/Metamaps.JIT.js b/app/assets/javascripts/src/Metamaps.JIT.js index 01b321f7..4fc1506e 100644 --- a/app/assets/javascripts/src/Metamaps.JIT.js +++ b/app/assets/javascripts/src/Metamaps.JIT.js @@ -1082,7 +1082,18 @@ Metamaps.JIT = { } return 'nothing'; // case 4? }, // handleSelectionBeforeDragging + getNodeXY: function(node) { + if (typeof node.pos.x === "number" && typeof node.pos.y === "number") { + return node.pos + } else if (typeof node.pos.theta === "number" && typeof node.pos.rho === "number") { + return new $jit.Polar(node.pos.theta, node.pos.rho).getc(true) + } else { + console.error('getNodeXY: unrecognized node pos format') + return {} + } + }, selectWithBox: function (e) { + var self = this var sX = Metamaps.Mouse.boxStartCoordinates.x, sY = Metamaps.Mouse.boxStartCoordinates.y, eX = Metamaps.Mouse.boxEndCoordinates.x, @@ -1094,11 +1105,17 @@ Metamaps.JIT = { } // select all nodes that are within the box - Metamaps.Visualize.mGraph.graph.eachNode(function (n) { - var x = n.pos.x, - y = n.pos.y + Metamaps.Visualize.mGraph.graph.eachNode(function(n) { + var pos = self.getNodeXY(n) + var x = pos.x, + y = pos.y - if ((sX < x && x < eX && sY < y && y < eY) || (sX > x && x > eX && sY > y && y > eY) || (sX > x && x > eX && sY < y && y < eY) || (sX < x && x < eX && sY > y && y > eY)) { + // depending on which way the person dragged the box, check that + // x and y are between the start and end values of the box + if ((sX < x && x < eX && sY < y && y < eY) || + (sX > x && x > eX && sY > y && y > eY) || + (sX > x && x > eX && sY < y && y < eY) || + (sX < x && x < eX && sY > y && y > eY)) { if (e.shiftKey) { if (n.selected) { Metamaps.Control.deselectNode(n) @@ -1123,10 +1140,12 @@ Metamaps.JIT = { } }) edgesToToggle.forEach(function (edge) { - var fromNodeX = edge.nodeFrom.pos.x - var fromNodeY = -1 * edge.nodeFrom.pos.y - var toNodeX = edge.nodeTo.pos.x - var toNodeY = -1 * edge.nodeTo.pos.y + var fromNodePos = self.getNodeXY(edge.nodeFrom) + var fromNodeX = fromNodePos.x + var fromNodeY = -1 * fromNodePos.y + var toNodePos = self.getNodeXY(edge.nodeTo) + var toNodeX = toNodePos.x + var toNodeY = -1 * toNodePos.y var maxX = fromNodeX var maxY = fromNodeY