getNodeAngularSpan method

({double end, double start}) getNodeAngularSpan(
  1. Node node
)

Implementation

({double start, double end}) getNodeAngularSpan(Node node) {
  if (isRoot(node)) {
    return (
      start: _currentState.radialAngleStart,
      end: _currentState.radialAngleStart + 2 * pi,
    );
  }

  List<Node> ancestors = [node];
  Node parent = _currentState.mindMap.parentOf(node);
  while (!isRoot(parent)) {
    ancestors.insert(0, parent);
    parent = _currentState.mindMap.parentOf(parent);
  }

  /// start from Root, it has 2 * pi span
  double startAngle = _currentState.radialAngleStart;
  double endAngle = _currentState.radialAngleStart + 2 * pi;
  for (int i = 0; i < ancestors.length; i++) {
    final ancestor = ancestors[i];
    if (isRoot(ancestor)) {
      continue;
    }
    final ancestorSpan = _getNodeAngularPanWithinParent(
      ancestor,
      parentStart: startAngle,
      parentEnd: endAngle,
    );
    startAngle = ancestorSpan.start;
    endAngle = ancestorSpan.end;
  }
  return (start: startAngle, end: endAngle);
}