paintZigZag function

void paintZigZag(
  1. Canvas canvas,
  2. Paint paint,
  3. Offset start,
  4. Offset end,
  5. int zigs,
  6. double width
)

Draw a line between two points, which cuts diagonally back and forth across the line that connects the two points.

The line will cross the line zigs - 1 times.

If zigs is 1, then this will draw two sides of a triangle from start to end, with the third point being width away from the line, as measured perpendicular to that line.

If width is positive, the first zig will be to the left of the start point when facing the end point. To reverse the zigging polarity, provide a negative width.

The line is drawn using the provided paint on the provided canvas.

Implementation

void paintZigZag(Canvas canvas, Paint paint, Offset start, Offset end, int zigs, double width) {
  assert(zigs.isFinite);
  assert(zigs > 0);
  canvas.save();
  canvas.translate(start.dx, start.dy);
  end = end - start;
  canvas.rotate(math.atan2(end.dy, end.dx));
  final double length = end.distance;
  final double spacing = length / (zigs * 2.0);
  final Path path = Path()
    ..moveTo(0.0, 0.0);
  for (int index = 0; index < zigs; index += 1) {
    final double x = (index * 2.0 + 1.0) * spacing;
    final double y = width * ((index % 2.0) * 2.0 - 1.0);
    path.lineTo(x, y);
  }
  path.lineTo(length, 0.0);
  canvas.drawPath(path, paint);
  canvas.restore();
}