From 8ad5ad7a5bae70212d32186f604b17448a9558ec Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Tue, 2 Jul 2019 00:23:06 +0000 Subject: [PATCH] Start moving functions into Node --- architype.js | 56 +++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/architype.js b/architype.js index 43d3c85..e47d1cb 100644 --- a/architype.js +++ b/architype.js @@ -364,12 +364,12 @@ class Architype { let nodes = graph.nodesByPageRank.get(ranks[r]); for (let n = 0; n < nodes.length; ++n) { let node = nodes[n]; - node.pos = [ + let pos = [ r * SPACING, Math.floor((nodes.length / 2) * SPACING) + (n * SPACING) + (node.subgraph * SPACING * maxRankNodes), ]; - graph.nodesByPos.set(node.pos.toString(), node); + node.moveTo(graph, pos); } } } @@ -485,9 +485,7 @@ class Architype { } } if (newPos) { - graph.nodesByPos.delete(node.pos.toString()); - node.pos = newPos; - graph.nodesByPos.set(node.pos.toString(), node); + node.moveTo(graph, newPos); return true; } } @@ -497,7 +495,7 @@ class Architype { getTotalTension(nodes) { let total = 0; for (let node of nodes) { - this.setTension(node); + node.setTension(); total += node.tension; } return total; @@ -505,29 +503,11 @@ class Architype { sortByMostTension(nodes) { for (let node of nodes) { - this.setTension(node); + node.setTension(); } nodes.sort((a, b) => b.tension - a.tension); } - setTension(node) { - node.vec = [0, 0]; - node.tension = 0; - for (let aff of node.affinity) { - let vec = [], vecsum = 0; - for (let i of [0, 1]) { - vec[i] = aff.node.pos[i] - node.pos[i]; - vecsum += Math.abs(vec[i]); - }; - let distance = Math.sqrt(Math.pow(vec[0], 2) + Math.pow(vec[1], 2)); - let weight = aff.distanceToWeight(distance); - for (let i of [0, 1]) { - node.vec[i] += (weight * vec[i]) / vecsum; - } - node.tension += Math.abs(weight); - } - } - drawGridNodes(graph) { for (let node of graph.nodes) { node.gridElem = document.createElement('div'); @@ -1012,6 +992,32 @@ class Node extends EditorEntryBase { return false; } + setTension() { + this.vec = [0, 0]; + this.tension = 0; + for (let aff of this.affinity) { + let vec = [], vecsum = 0; + for (let i of [0, 1]) { + vec[i] = aff.node.pos[i] - this.pos[i]; + vecsum += Math.abs(vec[i]); + }; + let distance = Math.sqrt(Math.pow(vec[0], 2) + Math.pow(vec[1], 2)); + let weight = aff.distanceToWeight(distance); + for (let i of [0, 1]) { + this.vec[i] += (weight * vec[i]) / vecsum; + } + this.tension += Math.abs(weight); + } + } + + moveTo(graph, pos) { + if (this.pos) { + graph.nodesByPos.delete(this.pos.toString()); + } + this.pos = pos; + graph.nodesByPos.set(this.pos.toString(), this); + } + onInput() { if (!this.input_.getAttribute('data-arch-value') || this.input_.value == '') {