Files
architype/Collection.js

53 lines
1.0 KiB
JavaScript
Raw Normal View History

2019-07-03 01:42:17 +00:00
class Collection {
constructor(nodes) {
this.nodes = new Set(nodes);
2019-07-03 01:42:17 +00:00
}
setTension() {
this.vec = [0, 0];
this.tension = 0;
for (let node of this.nodes.values()) {
2019-07-03 01:42:17 +00:00
node.setTension();
for (let i of [0, 1]) {
this.vec[i] += node.vec[i];
};
this.tension += node.tension;
}
}
offsetCollides(graph, offset) {
for (let node of this.nodes.values()) {
2019-07-03 01:42:17 +00:00
let other = node.offsetCollides(graph, offset);
if (other && !this.nodes.has(other)) {
2019-07-03 01:42:17 +00:00
return other;
}
}
return null;
}
savePos() {
for (let node of this.nodes.values()) {
2019-07-03 01:42:17 +00:00
node.savePos();
}
}
restorePos(graph) {
for (let node of this.nodes.values()) {
2019-07-03 01:42:17 +00:00
node.restorePos(graph);
}
}
moveBy(graph, offset) {
let nodes = new Set(this.nodes.values());
2019-07-03 01:42:17 +00:00
while (nodes.size) {
for (let node of nodes) {
if (node.offsetCollides(graph, offset)) {
continue;
}
node.moveBy(graph, offset);
nodes.delete(node);
}
}
}
}