dashedLines method
Implementation
List<Op> dashedLines(List<Line> lines, FillerConfig config) {
final double offset = config.dashOffset!;
final double gap = config.dashGap!;
final List<Op> ops = [];
for (final Line line in lines) {
final double length = line.length;
final int count = (length / (offset + gap)).floor();
final double lineOffset = (length + gap - (count * (offset + gap))) / 2;
PointD lineStart = line.source;
PointD lineEnd = line.target;
if (lineStart.x > lineEnd.x) {
lineStart = line.target;
lineEnd = line.source;
}
final double alpha =
atan((lineEnd.y - lineStart.y) / (lineEnd.x - lineStart.x));
for (int i = 0; i < count; i++) {
final double segmentStartOffset = i * (offset + gap);
final double segmentStartX = lineStart.x +
(segmentStartOffset * cos(alpha)) +
(lineOffset * cos(alpha));
final double segmentStartY = lineStart.y +
segmentStartOffset * sin(alpha) +
(lineOffset * sin(alpha));
final PointD gapStart = PointD(segmentStartX, segmentStartY);
final double segmentEndOffset = segmentStartOffset + offset;
final double segmentEndX = lineStart.x +
(segmentEndOffset * cos(alpha)) +
(lineOffset * cos(alpha));
final double segmentEndY = lineStart.y +
(segmentEndOffset * sin(alpha)) +
(lineOffset * sin(alpha));
final PointD gapEnd = PointD(segmentEndX, segmentEndY);
ops.addAll(OpsGenerator.doubleLine(
gapStart.x, gapStart.y, gapEnd.x, gapEnd.y, config.drawConfig!));
}
}
return ops;
}