HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
line_segment.hpp
Go to the documentation of this file.
1// Copyright Take Vos 2021.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
9#pragma once
10
11#include "point3.hpp"
12#include "vector3.hpp"
13#include "../macros.hpp"
14#include <cstddef>
15#include <exception>
16#include <compare>
17
18hi_export_module(hikogui.geometry : line_segment);
19
20hi_export namespace hi {
21inline namespace v1 {
22
27public:
28 constexpr line_segment(line_segment const &) noexcept = default;
29 constexpr line_segment(line_segment &&) noexcept = default;
30 constexpr line_segment &operator=(line_segment const &) noexcept = default;
31 constexpr line_segment &operator=(line_segment &&) noexcept = default;
32
33 [[nodiscard]] constexpr line_segment(point3 p, vector3 v) noexcept : _p(p), _v(v) {}
34
35 [[nodiscard]] constexpr line_segment(point3 p0, point3 p1) noexcept : line_segment(p0, p1 - p0) {}
36
37 [[nodiscard]] constexpr point3 origin() const noexcept
38 {
39 return _p;
40 }
41
42 [[nodiscard]] constexpr vector3 direction() const noexcept
43 {
44 return _v;
45 }
46
47 [[nodiscard]] friend float hypot(line_segment const &rhs) noexcept
48 {
49 return hypot(rhs._v);
50 }
51
52 template<std::size_t I>
53 [[nodiscard]] constexpr friend point3 get(line_segment const &rhs) noexcept
54 {
55 if constexpr (I == 0) {
56 return rhs._p;
57 } else if constexpr (I == 1) {
58 return rhs._p + rhs._v;
59 } else {
60 hi_static_no_default();
61 }
62 }
63
64 [[nodiscard]] constexpr friend point3 midpoint(line_segment const &rhs) noexcept
65 {
66 return rhs._p + rhs._v * 0.5f;
67 }
68
69private:
70 point3 _p;
71 vector3 _v;
72};
73
74
75}}
76
The HikoGUI namespace.
Definition array_generic.hpp:20
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
Line segment.
Definition line_segment.hpp:26
A high-level geometric vector Part of the high-level vector, point, mat and color types.
Definition vector3.hpp:26