9#include "translate2.hpp"
10#include "translate3.hpp"
15#include "perspective.hpp"
23#include "rectangle.hpp"
28#include "../macros.hpp"
34hi_export_module(hikogui.geometry :
transform);
36hi_export
namespace hi {
inline namespace v1 {
81[[
nodiscard]]
constexpr matrix2
operator*(translate2
const& lhs, matrix2
const& rhs)
noexcept
86[[
nodiscard]]
constexpr matrix3
operator*(translate3
const& lhs, matrix3
const& rhs)
noexcept
91[[
nodiscard]]
constexpr translate2
operator*(translate2
const& lhs, translate2
const& rhs)
noexcept
93 return translate2{f32x4{lhs} + f32x4{rhs}};
96[[
nodiscard]]
constexpr translate3
operator*(translate3
const& lhs, translate3
const& rhs)
noexcept
98 return translate3{f32x4{lhs} + f32x4{rhs}};
101[[
nodiscard]]
constexpr matrix2
operator*(translate2
const& lhs, scale2
const& rhs)
noexcept
103 hi_axiom(lhs.holds_invariant() && rhs.holds_invariant());
104 return matrix2{f32x4{rhs}.x000(), f32x4{rhs}._0y00(), f32x4{rhs}._00z0(), f32x4{lhs}.xyz1()};
107[[
nodiscard]]
constexpr matrix3
operator*(translate3
const& lhs, scale3
const& rhs)
noexcept
109 return matrix3{f32x4{rhs}.x000(), f32x4{rhs}._0y00(), f32x4{rhs}._00z0(), f32x4{lhs}.xyz1()};
112[[
nodiscard]]
constexpr matrix2
operator*(translate2
const& lhs, rotate2
const& rhs)
noexcept
114 return lhs * matrix2(rhs);
117[[
nodiscard]]
constexpr matrix3
operator*(translate3
const& lhs, rotate3
const& rhs)
noexcept
119 return lhs * matrix3(rhs);
122[[
nodiscard]]
constexpr matrix2
operator*(scale2
const& lhs, translate2
const& rhs)
noexcept
124 hi_axiom(lhs.holds_invariant() && rhs.holds_invariant());
125 return matrix2{f32x4{lhs}.x000(), f32x4{lhs}._0y00(), f32x4{lhs}._00z0(), f32x4{lhs} * f32x4{rhs}.xyz1()};
128[[
nodiscard]]
constexpr matrix3
operator*(scale3
const& lhs, translate3
const& rhs)
noexcept
130 hi_axiom(lhs.holds_invariant() && rhs.holds_invariant());
131 return matrix3{f32x4{lhs}.x000(), f32x4{lhs}._0y00(), f32x4{lhs}._00z0(), f32x4{lhs} * f32x4{rhs}.xyz1()};
134[[
nodiscard]]
constexpr scale2
operator*(scale2
const& lhs, scale2
const& rhs)
noexcept
136 return scale2{f32x4{lhs} * f32x4{rhs}};
139[[
nodiscard]]
constexpr scale3
operator*(scale3
const& lhs, scale3
const& rhs)
noexcept
141 return scale3{f32x4{lhs} * f32x4{rhs}};
186 return lhs.x() * rhs;
191 return lhs.x() * rhs;
216[[
nodiscard]]
constexpr vector2
operator*(translate2
const&, vector2
const& rhs)
noexcept
221[[
nodiscard]]
constexpr vector2
operator*(translate3
const&, vector2
const& rhs)
noexcept
226[[
nodiscard]]
constexpr vector2
operator*(scale2
const& lhs, vector2
const& rhs)
noexcept
228 return vector2{f32x4{lhs} * f32x4{rhs}};
231[[
nodiscard]]
constexpr vector2
operator*(scale3
const& lhs, vector2
const& rhs)
noexcept
233 return vector2{f32x4{lhs} * f32x4{rhs}};
248[[
nodiscard]]
constexpr vector3
operator*(translate3
const&, vector3
const& rhs)
noexcept
253[[
nodiscard]]
constexpr vector3
operator*(scale3
const& lhs, vector3
const& rhs)
noexcept
255 return vector3{f32x4{lhs} * f32x4{rhs}};
268[[
nodiscard]]
constexpr point2
operator*(translate2
const& lhs, point2
const& rhs)
noexcept
270 return point2{f32x4{lhs} + f32x4{rhs}};
273[[
nodiscard]]
constexpr point2
operator*(scale2
const& lhs, point2
const& rhs)
noexcept
275 return point2{f32x4{lhs} * f32x4{rhs}};
278[[
nodiscard]]
constexpr point2
operator*(scale3
const& lhs, point2
const& rhs)
noexcept
280 return point2{f32x4{lhs} * f32x4{rhs}};
295[[
nodiscard]]
constexpr point3
operator*(translate3
const& lhs, point3
const& rhs)
noexcept
297 return point3{f32x4{lhs} + f32x4{rhs}};
300[[
nodiscard]]
constexpr point3
operator*(scale3
const& lhs, point3
const& rhs)
noexcept
302 return point3{f32x4{lhs} * f32x4{rhs}};
305[[
nodiscard]]
constexpr extent2
operator*(transformer2
auto const& lhs, extent2
const& rhs)
noexcept
307 return extent2{lhs *vector2{rhs}};
310[[
nodiscard]]
constexpr extent3
operator*(transformer3
auto const& lhs, std::convertible_to<extent3>
auto const& rhs)
noexcept
312 return extent3{lhs *vector3{rhs}};
315[[
nodiscard]]
constexpr aarectangle
operator*(translate2
const& lhs, aarectangle
const& rhs)
noexcept
317 return aarectangle{lhs *
get<0>(rhs), lhs *
get<3>(rhs)};
386 return rectangle{lhs * rhs.origin, lhs * rhs.right, lhs * rhs.up};
396 return quad{lhs * rhs.p0, lhs * rhs.p1, lhs * rhs.p2, lhs * rhs.p3};
406 return circle{lhs * midpoint(rhs), lhs * rhs.radius()};
416 return line_segment{lhs * rhs.origin(), lhs * rhs.direction()};
435template<
typename Lhs, transformer Rhs>
437 requires requires(
Lhs& a,
Rhs const& b) { a = b * a; }
439 return lhs = rhs * lhs;
465 auto const top_extra = (lhs.top() * rhs.x() - lhs.top()) * 0.5f;
466 auto const bottom_extra = (lhs.bottom() * rhs.x() - lhs.bottom()) * 0.5f;
467 auto const left_extra = (lhs.left() * rhs.y() - lhs.left()) * 0.5f;
468 auto const right_extra = (lhs.right() * rhs.y() - lhs.right()) * 0.5f;
Defined the corner_radii type.
Defined the geo::extent, extent2 and extent3 types.
Defined the geo::extent, extent2 and extent3 types.
@ rectangle
The gui_event has rectangle data.
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
The HikoGUI namespace.
Definition recursive_iterator.hpp:15
constexpr aarectangle fast_mul(matrix2 const &lhs, aarectangle const &rhs) noexcept
Transform an axis-aligned rectangle without rotation by the matrix.
Definition transform.hpp:373
constexpr rectangle full_mul(matrix2 const &lhs, aarectangle const &rhs) noexcept
Transform an axis-aligned rectangle without rotation by the matrix.
Definition transform.hpp:361
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:378
constexpr Lhs & operator*=(Lhs &lhs, Rhs const &rhs) noexcept
Inplace geometric translation.
Definition transform.hpp:436
constexpr matrix2 operator*(matrix2 const &lhs, matrix2 const &rhs) noexcept
Matrix/Matrix multiplication.
Definition transform.hpp:69
constexpr quad scale_from_center(quad const &lhs, scale2 const &rhs) noexcept
scale the quad.
Definition transform.hpp:463
Class which represents an axis-aligned rectangle.
Definition aarectangle.hpp:33
A type defining a 2D circle.
Definition circle.hpp:23
The 4 radii of the corners of a quad or rectangle.
Definition corner_radii.hpp:26
Line segment.
Definition line_segment.hpp:26
A 2D or 3D homogenius matrix for transforming homogenious vectors and points.
Definition matrix2.hpp:39
A 2D or 3D homogenius matrix for transforming homogenious vectors and points.
Definition matrix3.hpp:36
Perspective transform.
Definition perspective.hpp:21
A rectangle / parallelogram in 3D space.
Definition rectangle.hpp:25
Definition rotate2.hpp:17
Definition rotate3.hpp:17
Definition transform.hpp:39
Definition transform.hpp:41
Definition translate2.hpp:18
Definition translate3.hpp:22
A high-level geometric vector Part of the high-level vector, point, mat and color types.
Definition vector2.hpp:26
A high-level geometric vector Part of the high-level vector, point, mat and color types.
Definition vector3.hpp:26
Definition transform.hpp:61
Definition transform.hpp:63
Definition transform.hpp:65