computePies function
List<PieSliceData>
computePies(
- List<
DataPoint> points, - double dx,
- double padAngle,
- ThicknessData thickness,
- double radius,
- ChartTransform? transform,
Computes slice layout for pie chart.
- Each point (x, y) defines an arc: r = x, startAngle = y, endAngle = y + dy.
- innerRadius = x - thicknessAlignedLeft, outerRadius = x + thicknessAlignedRight based on thicknessAlign.
- space = uniform linear gap between slices, set as spaceOffset (aligned with arc midpoint angle).
Implementation
List<PieSliceData> computePies(
List<DataPoint> points,
double dx,
double padAngle,
ThicknessData thickness,
double radius,
ChartTransform? transform
) {
final cornerRadius = transform != null ? transform.scalar(radius) : radius;
List<PieSliceData> layouts = [];
for (var point in points) {
final thicknessAlign = point.thickness?.align ?? thickness.align;
double thicknessSize = point.thickness?.size ?? thickness.size;
if (transform != null) {
thicknessSize = transform.scalar(thicknessSize);
}
if (point.x <= 0.0001 || thicknessSize <= 0.0001 || point.dy <= 0.0001) continue;
final halfInnerThickness = thicknessSize * (1 - thicknessAlign) / 2;
final halfOuterThickness = thicknessSize * (1 + thicknessAlign) / 2;
final innerRadius = max(0.0, point.x - halfInnerThickness);
final outerRadius = point.x + halfOuterThickness;
final pointDx = point.dx ?? dx;
final spaceOffset = toCartesian(pointDx, point);
layouts.add(PieSliceData(
startAngle: point.y,
endAngle: point.fy,
innerRadius: innerRadius,
outerRadius: outerRadius,
offset: spaceOffset,
point: point,
cornerRadius: min(cornerRadius, (outerRadius - innerRadius)/2),
padAngle: padAngle
));
}
return layouts;
}