Layout checkout, fix TODO in Collection

This commit is contained in:
Ian Gulliver
2019-07-03 03:36:48 +00:00
parent ccfec376ce
commit 4cc0b09d9b
3 changed files with 48 additions and 10 deletions

View File

@@ -1,12 +1,12 @@
class Collection {
constructor(nodes) {
this.nodes = nodes;
this.nodes = new Set(nodes);
}
setTension() {
this.vec = [0, 0];
this.tension = 0;
for (let node of this.nodes) {
for (let node of this.nodes.values()) {
node.setTension();
for (let i of [0, 1]) {
this.vec[i] += node.vec[i];
@@ -16,11 +16,9 @@ class Collection {
}
offsetCollides(graph, offset) {
// TODO: make this.nodes always a set
let nodeSet = new Set(this.nodes);
for (let node of this.nodes) {
for (let node of this.nodes.values()) {
let other = node.offsetCollides(graph, offset);
if (other && !nodeSet.has(other)) {
if (other && !this.nodes.has(other)) {
return other;
}
}
@@ -28,19 +26,19 @@ class Collection {
}
savePos() {
for (let node of this.nodes) {
for (let node of this.nodes.values()) {
node.savePos();
}
}
restorePos(graph) {
for (let node of this.nodes) {
for (let node of this.nodes.values()) {
node.restorePos(graph);
}
}
moveBy(graph, offset) {
let nodes = new Set(this.nodes);
let nodes = new Set(this.nodes.values());
while (nodes.size) {
for (let node of nodes) {
if (node.offsetCollides(graph, offset)) {

38
Layout.js Normal file
View File

@@ -0,0 +1,38 @@
class Layout {
constructor(graph) {
this.nodesByPos = new Map();
this.graph_ = graph;
this.setInitialPositions();
}
setInitialPositions() {
const SPACING = 4;
let maxRankNodes = 0;
for (let nodes of this.graph_.nodesByPageRank.values()) {
maxRankNodes = Math.max(maxRankNodes, nodes.length);
}
let ranks = Array.from(this.graph_.nodesByPageRank.keys());
ranks.sort((a, b) => a - b);
for (let r = 0; r < ranks.length; ++r) {
let nodes = this.graph_.nodesByPageRank.get(ranks[r]);
for (let n = 0; n < nodes.length; ++n) {
let node = nodes[n];
let pos = [
r * SPACING,
Math.floor((nodes.length / 2) * SPACING) + (n * SPACING) +
(node.subgraph * SPACING * maxRankNodes),
];
node.pos = pos;
this.setNodePos(node, pos);
}
}
}
setNodePos(node, pos) {
this.nodesByPos.set(pos.toString(), node);
}
}

View File

@@ -1,5 +1,7 @@
function onmessage(def) {
new Graph(def);
let graph = new Graph(def);
let layout = new Layout(graph);
}
<!--# include file="Graph.js" -->
<!--# include file="Layout.js" -->