calculateSegmentPoints method

  1. @override
void calculateSegmentPoints ()
override

Calculates the rendering bounds of a segment.

Implementation

@override
void calculateSegmentPoints() {
  final ChartAxis xAxis = series._xAxis;
  final ChartAxis yAxis = series._yAxis;
  final Rect rect = _calculatePlotOffset(
      series._chart._chartAxis._axisClipRect,
      Offset(xAxis.plotOffset, yAxis.plotOffset));
  _CartesianChartPoint<dynamic> prevPoint, point;
  _ChartLocation currentLocation;
  _path = Path();
  final _VisibleRange xVisibleRange = series._xAxis._visibleRange;
  final _VisibleRange yVisibleRange = series._yAxis._visibleRange;
  final List<_CartesianChartPoint<dynamic>> seriesPoints = series._dataPoints;
  final Rect areaBounds = series._chart._chartAxis._axisClipRect;
  final num xTolerance = (xVisibleRange.delta / areaBounds.width).abs();
  final num yTolerance = (yVisibleRange.delta / areaBounds.height).abs();
  num prevXValue = (seriesPoints.isNotEmpty &&
          seriesPoints[0] != null &&
          seriesPoints[0].xValue > xTolerance)
      ? 0
      : xTolerance;
  num prevYValue = (seriesPoints.isNotEmpty &&
          seriesPoints[0] != null &&
          seriesPoints[0].yValue > yTolerance)
      ? 0
      : yTolerance;
  num xVal = 0;
  num yVal = 0;

  ///Eliminating nearest points
  dynamic currentPoint;
  for (int pointIndex = 0;
      pointIndex < series._dataPoints.length;
      pointIndex++) {
    currentPoint = series._dataPoints[pointIndex];
    xVal = currentPoint.xValue != null
        ? currentPoint.xValue
        : xVisibleRange.minimum;
    yVal = currentPoint.yValue != null
        ? currentPoint.yValue
        : yVisibleRange.minimum;
    if ((prevXValue - xVal).abs() >= xTolerance ||
        (prevYValue - yVal).abs() >= yTolerance) {
      point = currentPoint;
      if (point.isVisible) {
        currentLocation = _calculatePoint(point.xValue, point.yValue, xAxis,
            yAxis, series._chart._requireInvertedAxis, series, rect);
        point.markerPoint = currentLocation;
        if (prevPoint == null)
          _path.moveTo(currentLocation.x, currentLocation.y);
        else if (series._dataPoints[pointIndex - 1].isVisible == false &&
            series.emptyPointSettings.mode == EmptyPointMode.gap)
          _path.moveTo(currentLocation.x, currentLocation.y);
        else if (point.isGap != true &&
            series._dataPoints[pointIndex - 1].isGap != true &&
            series._dataPoints[pointIndex].isVisible == true)
          _path.lineTo(currentLocation.x, currentLocation.y);
        else
          _path.moveTo(currentLocation.x, currentLocation.y);
      }
      prevPoint = point;
      prevXValue = xVal;
      prevYValue = yVal;
    }
  }
}