nalgebra/third_party/glam/common/
glam_isometry.rs

1use super::glam::{DMat3, DMat4, DQuat, DVec2, DVec3, Mat3, Mat4, Quat, Vec2, Vec3};
2use crate::{Isometry2, Isometry3, Matrix3, Matrix4, Translation3, UnitQuaternion};
3use std::convert::TryFrom;
4
5impl From<Isometry2<f32>> for Mat3 {
6    fn from(iso: Isometry2<f32>) -> Mat3 {
7        iso.to_homogeneous().into()
8    }
9}
10impl From<Isometry3<f32>> for Mat4 {
11    fn from(iso: Isometry3<f32>) -> Mat4 {
12        iso.to_homogeneous().into()
13    }
14}
15
16impl From<Isometry2<f64>> for DMat3 {
17    fn from(iso: Isometry2<f64>) -> DMat3 {
18        iso.to_homogeneous().into()
19    }
20}
21impl From<Isometry3<f64>> for DMat4 {
22    fn from(iso: Isometry3<f64>) -> DMat4 {
23        iso.to_homogeneous().into()
24    }
25}
26
27impl From<Isometry3<f32>> for (Vec3, Quat) {
28    fn from(iso: Isometry3<f32>) -> (Vec3, Quat) {
29        (iso.translation.into(), iso.rotation.into())
30    }
31}
32
33impl From<Isometry3<f64>> for (DVec3, DQuat) {
34    fn from(iso: Isometry3<f64>) -> (DVec3, DQuat) {
35        (iso.translation.into(), iso.rotation.into())
36    }
37}
38
39impl From<Isometry2<f32>> for (Vec2, f32) {
40    fn from(iso: Isometry2<f32>) -> (Vec2, f32) {
41        let tra = Vec2::new(iso.translation.x, iso.translation.y);
42        let rot = iso.rotation.angle();
43        (tra, rot)
44    }
45}
46
47impl From<Isometry2<f64>> for (DVec2, f64) {
48    fn from(iso: Isometry2<f64>) -> (DVec2, f64) {
49        let tra = DVec2::new(iso.translation.x, iso.translation.y);
50        let rot = iso.rotation.angle();
51        (tra, rot)
52    }
53}
54
55impl From<(Vec3, Quat)> for Isometry3<f32> {
56    fn from((tra, rot): (Vec3, Quat)) -> Self {
57        Isometry3::from_parts(tra.into(), rot.into())
58    }
59}
60
61impl From<(DVec3, DQuat)> for Isometry3<f64> {
62    fn from((tra, rot): (DVec3, DQuat)) -> Self {
63        Isometry3::from_parts(tra.into(), rot.into())
64    }
65}
66
67impl From<(Vec2, f32)> for Isometry2<f32> {
68    fn from((tra, rot): (Vec2, f32)) -> Self {
69        Isometry2::new(tra.into(), rot)
70    }
71}
72
73impl From<(DVec2, f64)> for Isometry2<f64> {
74    fn from((tra, rot): (DVec2, f64)) -> Self {
75        Isometry2::new(tra.into(), rot)
76    }
77}
78
79impl From<Quat> for Isometry3<f32> {
80    fn from(rot: Quat) -> Self {
81        Isometry3::from_parts(Translation3::identity(), rot.into())
82    }
83}
84
85impl From<DQuat> for Isometry3<f64> {
86    fn from(rot: DQuat) -> Self {
87        Isometry3::from_parts(Translation3::identity(), rot.into())
88    }
89}
90
91impl From<Vec3> for Isometry3<f32> {
92    fn from(tra: Vec3) -> Self {
93        Isometry3::from_parts(tra.into(), UnitQuaternion::identity())
94    }
95}
96
97impl From<DVec3> for Isometry3<f64> {
98    fn from(tra: DVec3) -> Self {
99        Isometry3::from_parts(tra.into(), UnitQuaternion::identity())
100    }
101}
102
103impl From<Vec2> for Isometry2<f32> {
104    fn from(tra: Vec2) -> Self {
105        Isometry2::new(tra.into(), 0.0)
106    }
107}
108
109impl From<DVec2> for Isometry2<f64> {
110    fn from(tra: DVec2) -> Self {
111        Isometry2::new(tra.into(), 0.0)
112    }
113}
114
115impl TryFrom<Mat3> for Isometry2<f32> {
116    type Error = ();
117
118    fn try_from(mat3: Mat3) -> Result<Isometry2<f32>, Self::Error> {
119        crate::try_convert(Matrix3::from(mat3)).ok_or(())
120    }
121}
122
123impl TryFrom<Mat4> for Isometry3<f32> {
124    type Error = ();
125
126    fn try_from(mat4: Mat4) -> Result<Isometry3<f32>, Self::Error> {
127        crate::try_convert(Matrix4::from(mat4)).ok_or(())
128    }
129}
130
131impl TryFrom<DMat3> for Isometry2<f64> {
132    type Error = ();
133
134    fn try_from(mat3: DMat3) -> Result<Isometry2<f64>, Self::Error> {
135        crate::try_convert(Matrix3::from(mat3)).ok_or(())
136    }
137}
138
139impl TryFrom<DMat4> for Isometry3<f64> {
140    type Error = ();
141
142    fn try_from(mat4: DMat4) -> Result<Isometry3<f64>, Self::Error> {
143        crate::try_convert(Matrix4::from(mat4)).ok_or(())
144    }
145}