Blender V5.0
BLI_math_axis_angle_types.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
22
23#include <ostream>
24
28
29namespace blender::math {
30
31template<typename T, typename AngleT> struct AxisAngleBase {
33
34 private:
36 vec3_type axis_ = {0, 1, 0};
37 AngleT angle_ = AngleT::identity();
38
39 public:
40 AxisAngleBase() = default;
41
45 AxisAngleBase(const AxisSigned axis, const AngleT &angle);
46
51 AxisAngleBase(const vec3_type &axis, const AngleT &angle);
52
58 AxisAngleBase(const vec3_type &from, const vec3_type &to);
59
61
63 {
64 return {};
65 }
66
68
69 const vec3_type &axis() const
70 {
71 return axis_;
72 }
73
74 const AngleT &angle() const
75 {
76 return angle_;
77 }
78
80
82
83 friend std::ostream &operator<<(std::ostream &stream, const AxisAngleBase &rot)
84 {
85 return stream << "AxisAngle(axis=" << rot.axis() << ", angle=" << rot.angle() << ")";
86 }
87};
88
91
92} // namespace blender::math
#define BLI_STRUCT_EQUALITY_OPERATORS_2(Type, m1, m2)
#define rot(x, k)
AxisAngleBase< float, AngleRadianBase< float > > AxisAngle
AxisAngleBase< float, AngleCartesianBase< float > > AxisAngleCartesian
AxisAngleBase(const vec3_type &axis, const AngleT &angle)
AxisAngleBase(const AxisSigned axis, const AngleT &angle)
AxisAngleBase(const vec3_type &from, const vec3_type &to)