static std::pair clipLine()

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);
  }