Start moving functions into Node
This commit is contained in:
56
architype.js
56
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 == '') {
|
||||
|
||||
Reference in New Issue
Block a user