ChartItemLayoutState.arc constructor

ChartItemLayoutState.arc({
  1. required Offset center,
  2. required double innerRadius,
  3. required double outRadius,
  4. required double startAngle,
  5. required double sweepAngle,
})

弧 用path保存 path不便于计算

Implementation

ChartItemLayoutState.arc({
  required Offset center, // 中心点
  required double innerRadius, // 小圆半径
  required double outRadius, // 大圆半径
  required double startAngle,
  required double sweepAngle,
}) {
  originRect = null;
  double startRad = startAngle;
  double endRad = startAngle + sweepAngle;

  double r0 = innerRadius;
  double r1 = outRadius;
  Offset p0 = Offset(math.cos(startRad) * r0, math.sin(startRad) * r0);
  Offset p1 = Offset(math.cos(startRad) * r1, math.sin(startRad) * r1);
  Offset q0 = Offset(math.cos(endRad) * r0, math.sin(endRad) * r0);
  Offset q1 = Offset(math.cos(endRad) * r1, math.sin(endRad) * r1);

  bool large = sweepAngle.abs() > math.pi;
  bool clockwise = sweepAngle > 0;

  Path localPath = Path()
    ..moveTo(p0.dx, p0.dy)
    ..lineTo(p1.dx, p1.dy)
    ..arcToPoint(q1, radius: Radius.circular(r1), clockwise: clockwise, largeArc: large)
    ..lineTo(q0.dx, q0.dy)
    ..arcToPoint(p0, radius: Radius.circular(r0), clockwise: !clockwise, largeArc: large);
  path = localPath.shift(center);
}