ranges360 property

List<AngleRange> ranges360

Returns the equivalent range(s) projected onto the 0-360 degree circle.

Note that there may be either one or two ranges in the returned list, depending on whether or not the projection of this range crosses 0 degrees.

Implementation

List<AngleRange> get ranges360 {
  if (revolutions.abs() > 0) return <AngleRange>[AngleRange(angle0, angle360)];

  final rangeList = <AngleRange>[];

  if (startAngle < endAngle) {
    // clockwise
    final start360 = startAngle.angle360;
    final delta = start360 - startAngle as Angle;
    final endPlusDelta = endAngle + delta as Angle;
    if (endPlusDelta.valueSI > twoPi) {
      rangeList..add(AngleRange(angle0, endPlusDelta.angle360))..add(AngleRange(start360, angle360));
    } else {
      rangeList.add(AngleRange(start360, endPlusDelta));
    }
  } else {
    // counterclockwise
    final end360 = endAngle.angle360;
    final delta = end360 - endAngle as Angle;
    final startPlusDelta = startAngle + delta as Angle;
    if (startPlusDelta.valueSI > twoPi) {
      rangeList..add(AngleRange(angle360, end360))..add(AngleRange(startPlusDelta - angle360 as Angle, angle0));
    } else {
      rangeList.add(AngleRange(end360, startPlusDelta));
    }
  }

  return rangeList;
}