in src/graphics/PlotUtil.cpp [343:373]
static std::pair<Point, Point> clipLine(Point from, Point to, const Rectangle& clippingArea) {
auto containsFrom = clippingArea.contains(from);
auto containsTo = clippingArea.contains(to);
if (!containsFrom || !containsTo) {
auto line = Line(from, to);
Intersection intersections[] = {
line.intersectWithX(clippingArea.from.x),
line.intersectWithX(clippingArea.to.x),
line.intersectWithY(clippingArea.from.y),
line.intersectWithY(clippingArea.to.y),
};
auto hasExistent = false;
for (auto& intersection : intersections) {
if (intersection.isExistent && !touchesClippingArea(intersection.point, clippingArea)) {
intersection.isExistent = false;
}
if (intersection.isExistent) {
hasExistent = true;
}
}
if (hasExistent) {
if (!containsFrom) {
from = findClosestIntersection(from, intersections);
}
if (!containsTo) {
to = findClosestIntersection(to, intersections);
}
}
}
return std::make_pair(from, to);
}