extractPart method

LineSegmentPath extractPart(
  1. double startDistance,
  2. double endDistance
)

Creates a new LineString that consists of only the part between startDistance and endDistance.

Implementation

LineSegmentPath extractPart(double startDistance, double endDistance) {
  LineSegmentPath result = LineSegmentPath();

  for (int i = 0; i < segments.length; startDistance -= segments.elementAt(i).length(), endDistance -= segments.elementAt(i).length(), i++) {
    LineSegment segment = segments.elementAt(i);

    // Skip first segments that we don't need
    double length = segment.length();
    if (length < startDistance) {
      continue;
    }

    Mappoint? startPoint, endPoint;
    if (startDistance >= 0) {
      // This will be our starting point
      startPoint = segment.pointAlongLineSegment(startDistance);
    }
    if (endDistance < length) {
      // this will be our ending point
      endPoint = segment.pointAlongLineSegment(endDistance);
    }

    if (startPoint != null && endPoint == null) {
      // This ist the starting segment, end will come in a later segment
      result.segments.add(LineSegment(startPoint, segment.end));
    } else if (startPoint == null && endPoint == null) {
      // Center segment between start and end segment, add completely
      result.segments.add(segment);
    } else if (startPoint == null && endPoint != null) {
      // End segment, start was in earlier segment
      result.segments.add(LineSegment(segment.start, endPoint));
    } else if (startPoint != null && endPoint != null) {
      // Start and end on same segment
      result.segments.add(LineSegment(startPoint, endPoint));
    }

    if (endPoint != null) break;
  }

  return result;
}