calculateSegmentPoints method
- @override
override
Calculates the rendering bounds of a segment.
Implementation
@override
void calculateSegmentPoints() {
final Rect rect = series._chart._chartAxis._axisClipRect;
_CartesianChartPoint<dynamic> prevPoint;
_ChartLocation currentPoint, originPoint;
final ChartAxis xAxis = series._xAxis;
final ChartAxis yAxis = series._yAxis;
_CartesianChartPoint<dynamic> point;
_path = Path();
_strokePath = Path();
for (int pointIndex = 0;
pointIndex < series._dataPoints.length;
pointIndex++) {
point = series._dataPoints[pointIndex];
if (point.isVisible) {
currentPoint = _calculatePoint(point.xValue, point.yValue, xAxis, yAxis,
series._chart._requireInvertedAxis, series, rect);
originPoint = _calculatePoint(
point.xValue,
math_lib.max(yAxis._visibleRange.minimum, 0),
xAxis,
yAxis,
series._chart._requireInvertedAxis,
series,
rect);
if (prevPoint == null ||
series._dataPoints[pointIndex - 1].isGap == true ||
(series._dataPoints[pointIndex].isGap == true) ||
(series._dataPoints[pointIndex - 1].isVisible == false &&
series.emptyPointSettings.mode == EmptyPointMode.gap)) {
_path.moveTo(originPoint.x, originPoint.y);
_strokePath.moveTo(currentPoint.x, currentPoint.y);
_path.lineTo(currentPoint.x, currentPoint.y);
} else if (pointIndex == series._dataPoints.length - 1 ||
series._dataPoints[pointIndex + 1].isGap == true) {
_strokePath.lineTo(currentPoint.x, currentPoint.y);
_path.lineTo(currentPoint.x, currentPoint.y);
_path.lineTo(originPoint.x, originPoint.y);
} else {
_strokePath.lineTo(currentPoint.x, currentPoint.y);
_path.lineTo(currentPoint.x, currentPoint.y);
}
prevPoint = point;
}
}
final AreaSeries<dynamic, dynamic> areaSeries = series;
if (areaSeries.borderMode == AreaBorderMode.all) {
_path.close();
_strokePath = _path;
} else if (areaSeries.borderMode == AreaBorderMode.excludeBottom) {
_strokePath = _path;
}
_pathRect = _path.getBounds();
}