45 lines
1.2 KiB
C++
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
|