Files
pdf/engine/include/pdfengine/geometry/quad.hpp
T
2026-08-03 11:26:44 +05:30

45 lines
1.2 KiB
C++

#pragma once
#include <pdfengine/geometry/rect.hpp>
#include <pdfengine/geometry/matrix.hpp>
namespace pdfengine {
namespace geometry {
struct Quad {
Point p1; // Top-Left
Point p2; // Top-Right
Point p3; // Bottom-Right
Point p4; // Bottom-Left
constexpr Quad() noexcept = default;
constexpr Quad(Point pt1, Point pt2, Point pt3, Point pt4) noexcept
: p1(pt1), p2(pt2), p3(pt3), p4(pt4) {}
explicit Quad(const Rect& rect) noexcept
: p1(rect.left(), rect.top()),
p2(rect.right(), rect.top()),
p3(rect.right(), rect.bottom()),
p4(rect.left(), rect.bottom()) {}
[[nodiscard]] Rect boundingBox() const noexcept {
float l = std::min({p1.x, p2.x, p3.x, p4.x});
float r = std::max({p1.x, p2.x, p3.x, p4.x});
float t = std::min({p1.y, p2.y, p3.y, p4.y});
float b = std::max({p1.y, p2.y, p3.y, p4.y});
return Rect(l, t, r - l, b - t);
}
[[nodiscard]] Quad transform(const Matrix& m) const noexcept {
return Quad(
m.transformPoint(p1),
m.transformPoint(p2),
m.transformPoint(p3),
m.transformPoint(p4)
);
}
};
} // namespace geometry
} // namespace pdfengine