nalgebra/third_party/glam/common/
glam_point.rs

1use super::glam::{
2    BVec2, BVec3, BVec4, DVec2, DVec3, DVec4, IVec2, IVec3, IVec4, UVec2, UVec3, UVec4, Vec2, Vec3,
3    Vec3A, Vec4,
4};
5use crate::{Point2, Point3, Point4};
6
7macro_rules! impl_point_conversion(
8    ($N: ty, $Vec2: ty, $Vec3: ty, $Vec4: ty) => {
9        impl From<$Vec2> for Point2<$N> {
10            #[inline]
11            fn from(e: $Vec2) -> Point2<$N> {
12                <[$N;2]>::from(e).into()
13            }
14        }
15
16        impl From<Point2<$N>> for $Vec2 {
17            #[inline]
18            fn from(e: Point2<$N>) -> $Vec2 {
19                <$Vec2>::new(e[0], e[1])
20            }
21        }
22
23        impl From<$Vec3> for Point3<$N> {
24            #[inline]
25            fn from(e: $Vec3) -> Point3<$N> {
26                <[$N;3]>::from(e).into()
27            }
28        }
29
30        impl From<Point3<$N>> for $Vec3 {
31            #[inline]
32            fn from(e: Point3<$N>) -> $Vec3 {
33                <$Vec3>::new(e[0], e[1], e[2])
34            }
35        }
36
37        impl From<$Vec4> for Point4<$N> {
38            #[inline]
39            fn from(e: $Vec4) -> Point4<$N> {
40                <[$N;4]>::from(e).into()
41            }
42        }
43
44        impl From<Point4<$N>> for $Vec4 {
45            #[inline]
46            fn from(e: Point4<$N>) -> $Vec4 {
47                <$Vec4>::new(e[0], e[1], e[2], e[3])
48            }
49        }
50    }
51);
52
53impl_point_conversion!(f32, Vec2, Vec3, Vec4);
54impl_point_conversion!(f64, DVec2, DVec3, DVec4);
55impl_point_conversion!(i32, IVec2, IVec3, IVec4);
56impl_point_conversion!(u32, UVec2, UVec3, UVec4);
57impl_point_conversion!(bool, BVec2, BVec3, BVec4);
58
59impl From<Vec3A> for Point3<f32> {
60    #[inline]
61    fn from(e: Vec3A) -> Point3<f32> {
62        (*e.as_ref()).into()
63    }
64}
65
66impl From<Point3<f32>> for Vec3A {
67    #[inline]
68    fn from(e: Point3<f32>) -> Vec3A {
69        Vec3A::new(e[0], e[1], e[2])
70    }
71}