lineclip function
Implementation
List<List<Position>> lineclip(
List<Position> points,
BBox bbox, [
List<List<Position>>? result,
]) {
final int len = points.length;
int codeA = bitCode(points[0], bbox);
List<Position> part = [];
result ??= [];
for (int i = 1; i < len; i++) {
Position a = points[i - 1];
Position b = points[i];
int codeB = bitCode(b, bbox);
final int lastCode = codeB;
while (true) {
if ((codeA | codeB) == 0) {
part.add(a);
if (codeB != lastCode) {
part.add(b);
if (i < len - 1) {
result.add(List<Position>.from(part));
part = [];
}
} else if (i == len - 1) {
part.add(b);
}
break;
} else if ((codeA & codeB) != 0) {
break;
} else if (codeA != 0) {
a = intersect(a, b, codeA, bbox);
codeA = bitCode(a, bbox);
} else {
b = intersect(a, b, codeB, bbox);
codeB = bitCode(b, bbox);
}
}
codeA = lastCode;
}
if (part.isNotEmpty) result.add(List<Position>.from(part));
return result;
}