updateAllNodes method

bool updateAllNodes()

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;
}