updateAllNodes method
Implementation
bool updateAllNodes() {
final kdTree = KDTree.fromNode(nodes);
for (final node in nodes) {
final others = kdTree.findNeighbors(node.position, config.repulsionRange);
for (final other in others) {
if (node == other) continue;
final repulsionForce =
node.calculateRepulsionForce(other, k: config.repulsion);
node.applyForce(repulsionForce);
}
}
for (final edge in edges) {
final attractionForce = edge.calculateAttractionForce(
k: config.elasticity, length: config.length);
final attractionForceDirectionA =
edge.calculateAttractionForceDirectionA();
final fa = attractionForceDirectionA * attractionForce;
edge.a.applyForce(fa);
edge.b.applyForce(-fa);
}
bool positionUpdated = false;
for (final node in nodes) {
positionUpdated |= node.updatePosition(
scaling: config.scaling,
minVelocity: config.minVelocity,
maxStaticFriction: config.maxStaticFriction,
damping: config.damping,
);
}
return positionUpdated;
}