-
-
Notifications
You must be signed in to change notification settings - Fork 487
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #900 from dimforge/glam-multiversion
Support multiple version of the optional glam conversion
- Loading branch information
Showing
18 changed files
with
417 additions
and
306 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,193 @@ | ||
use super::glam::{DMat3, DMat4, DQuat, DVec2, DVec3, Mat3, Mat4, Quat, Vec2, Vec3}; | ||
use crate::{Isometry2, Isometry3, Matrix3, Matrix4}; | ||
use std::convert::TryFrom; | ||
|
||
impl From<Isometry2<f32>> for Mat3 { | ||
fn from(iso: Isometry2<f32>) -> Mat3 { | ||
iso.to_homogeneous().into() | ||
} | ||
} | ||
impl From<Isometry3<f32>> for Mat4 { | ||
fn from(iso: Isometry3<f32>) -> Mat4 { | ||
iso.to_homogeneous().into() | ||
} | ||
} | ||
|
||
impl From<Isometry2<f64>> for DMat3 { | ||
fn from(iso: Isometry2<f64>) -> DMat3 { | ||
iso.to_homogeneous().into() | ||
} | ||
} | ||
impl From<Isometry3<f64>> for DMat4 { | ||
fn from(iso: Isometry3<f64>) -> DMat4 { | ||
iso.to_homogeneous().into() | ||
} | ||
} | ||
|
||
impl From<Isometry3<f32>> for (Vec3, Quat) { | ||
fn from(iso: Isometry3<f32>) -> (Vec3, Quat) { | ||
(iso.translation.into(), iso.rotation.into()) | ||
} | ||
} | ||
|
||
impl From<Isometry3<f64>> for (DVec3, DQuat) { | ||
fn from(iso: Isometry3<f64>) -> (DVec3, DQuat) { | ||
(iso.translation.into(), iso.rotation.into()) | ||
} | ||
} | ||
|
||
impl From<Isometry2<f32>> for (Vec3, Quat) { | ||
fn from(iso: Isometry2<f32>) -> (Vec3, Quat) { | ||
let tra = Vec3::new(iso.translation.x, iso.translation.y, 0.0); | ||
let rot = Quat::from_axis_angle(Vec3::Z, iso.rotation.angle()); | ||
(tra, rot) | ||
} | ||
} | ||
|
||
impl From<Isometry2<f64>> for (DVec3, DQuat) { | ||
fn from(iso: Isometry2<f64>) -> (DVec3, DQuat) { | ||
let tra = DVec3::new(iso.translation.x, iso.translation.y, 0.0); | ||
let rot = DQuat::from_axis_angle(DVec3::Z, iso.rotation.angle()); | ||
(tra, rot) | ||
} | ||
} | ||
|
||
impl From<(Vec3, Quat)> for Isometry3<f32> { | ||
fn from((tra, rot): (Vec3, Quat)) -> Self { | ||
Isometry3::from_parts(tra.into(), rot.into()) | ||
} | ||
} | ||
|
||
impl From<(DVec3, DQuat)> for Isometry3<f64> { | ||
fn from((tra, rot): (DVec3, DQuat)) -> Self { | ||
Isometry3::from_parts(tra.into(), rot.into()) | ||
} | ||
} | ||
|
||
impl From<(Vec3, Quat)> for Isometry2<f32> { | ||
fn from((tra, rot): (Vec3, Quat)) -> Self { | ||
Isometry2::new([tra.x, tra.y].into(), rot.to_axis_angle().1) | ||
} | ||
} | ||
|
||
impl From<(DVec3, DQuat)> for Isometry2<f64> { | ||
fn from((tra, rot): (DVec3, DQuat)) -> Self { | ||
Isometry2::new([tra.x, tra.y].into(), rot.to_axis_angle().1) | ||
} | ||
} | ||
|
||
impl From<(Vec2, Quat)> for Isometry2<f32> { | ||
fn from((tra, rot): (Vec2, Quat)) -> Self { | ||
Isometry2::new(tra.into(), rot.to_axis_angle().1) | ||
} | ||
} | ||
|
||
impl From<(DVec2, DQuat)> for Isometry2<f64> { | ||
fn from((tra, rot): (DVec2, DQuat)) -> Self { | ||
Isometry2::new(tra.into(), rot.to_axis_angle().1) | ||
} | ||
} | ||
|
||
impl From<(Vec2, f32)> for Isometry2<f32> { | ||
fn from((tra, rot): (Vec2, f32)) -> Self { | ||
Isometry2::new(tra.into(), rot) | ||
} | ||
} | ||
|
||
impl From<(DVec2, f64)> for Isometry2<f64> { | ||
fn from((tra, rot): (DVec2, f64)) -> Self { | ||
Isometry2::new(tra.into(), rot) | ||
} | ||
} | ||
|
||
impl From<Quat> for Isometry3<f32> { | ||
fn from(rot: Quat) -> Self { | ||
Isometry3::from_parts(crate::one(), rot.into()) | ||
} | ||
} | ||
|
||
impl From<DQuat> for Isometry3<f64> { | ||
fn from(rot: DQuat) -> Self { | ||
Isometry3::from_parts(crate::one(), rot.into()) | ||
} | ||
} | ||
|
||
impl From<Quat> for Isometry2<f32> { | ||
fn from(rot: Quat) -> Self { | ||
Isometry2::new(crate::zero(), rot.to_axis_angle().1) | ||
} | ||
} | ||
|
||
impl From<DQuat> for Isometry2<f64> { | ||
fn from(rot: DQuat) -> Self { | ||
Isometry2::new(crate::zero(), rot.to_axis_angle().1) | ||
} | ||
} | ||
|
||
impl From<Vec3> for Isometry3<f32> { | ||
fn from(tra: Vec3) -> Self { | ||
Isometry3::from_parts(tra.into(), crate::one()) | ||
} | ||
} | ||
|
||
impl From<DVec3> for Isometry3<f64> { | ||
fn from(tra: DVec3) -> Self { | ||
Isometry3::from_parts(tra.into(), crate::one()) | ||
} | ||
} | ||
|
||
impl From<Vec2> for Isometry2<f32> { | ||
fn from(tra: Vec2) -> Self { | ||
Isometry2::new(tra.into(), crate::one()) | ||
} | ||
} | ||
|
||
impl From<DVec2> for Isometry2<f64> { | ||
fn from(tra: DVec2) -> Self { | ||
Isometry2::new(tra.into(), crate::one()) | ||
} | ||
} | ||
|
||
impl From<Vec3> for Isometry2<f32> { | ||
fn from(tra: Vec3) -> Self { | ||
Isometry2::new([tra.x, tra.y].into(), crate::one()) | ||
} | ||
} | ||
|
||
impl From<DVec3> for Isometry2<f64> { | ||
fn from(tra: DVec3) -> Self { | ||
Isometry2::new([tra.x, tra.y].into(), crate::one()) | ||
} | ||
} | ||
|
||
impl TryFrom<Mat3> for Isometry2<f32> { | ||
type Error = (); | ||
|
||
fn try_from(mat3: Mat3) -> Result<Isometry2<f32>, Self::Error> { | ||
crate::try_convert(Matrix3::from(mat3)).ok_or(()) | ||
} | ||
} | ||
|
||
impl TryFrom<Mat4> for Isometry3<f32> { | ||
type Error = (); | ||
|
||
fn try_from(mat4: Mat4) -> Result<Isometry3<f32>, Self::Error> { | ||
crate::try_convert(Matrix4::from(mat4)).ok_or(()) | ||
} | ||
} | ||
|
||
impl TryFrom<DMat3> for Isometry2<f64> { | ||
type Error = (); | ||
|
||
fn try_from(mat3: DMat3) -> Result<Isometry2<f64>, Self::Error> { | ||
crate::try_convert(Matrix3::from(mat3)).ok_or(()) | ||
} | ||
} | ||
|
||
impl TryFrom<DMat4> for Isometry3<f64> { | ||
type Error = (); | ||
|
||
fn try_from(mat4: DMat4) -> Result<Isometry3<f64>, Self::Error> { | ||
crate::try_convert(Matrix4::from(mat4)).ok_or(()) | ||
} | ||
} |
6 changes: 3 additions & 3 deletions
6
src/third_party/glam/glam_matrix.rs → src/third_party/glam/common/glam_matrix.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
src/third_party/glam/glam_point.rs → src/third_party/glam/common/glam_point.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
use super::glam::{DMat2, DQuat, Mat2, Quat}; | ||
use crate::{Rotation2, Rotation3, UnitComplex, UnitQuaternion}; | ||
|
||
impl From<Rotation2<f32>> for Mat2 { | ||
#[inline] | ||
fn from(e: Rotation2<f32>) -> Mat2 { | ||
e.into_inner().into() | ||
} | ||
} | ||
|
||
impl From<Rotation2<f64>> for DMat2 { | ||
#[inline] | ||
fn from(e: Rotation2<f64>) -> DMat2 { | ||
e.into_inner().into() | ||
} | ||
} | ||
|
||
impl From<Rotation3<f32>> for Quat { | ||
#[inline] | ||
fn from(e: Rotation3<f32>) -> Quat { | ||
UnitQuaternion::from(e).into() | ||
} | ||
} | ||
|
||
impl From<Rotation3<f64>> for DQuat { | ||
#[inline] | ||
fn from(e: Rotation3<f64>) -> DQuat { | ||
UnitQuaternion::from(e).into() | ||
} | ||
} | ||
|
||
impl From<Mat2> for Rotation2<f32> { | ||
#[inline] | ||
fn from(e: Mat2) -> Rotation2<f32> { | ||
UnitComplex::from(e).to_rotation_matrix() | ||
} | ||
} | ||
|
||
impl From<DMat2> for Rotation2<f64> { | ||
#[inline] | ||
fn from(e: DMat2) -> Rotation2<f64> { | ||
UnitComplex::from(e).to_rotation_matrix() | ||
} | ||
} | ||
|
||
impl From<Quat> for Rotation3<f32> { | ||
#[inline] | ||
fn from(e: Quat) -> Rotation3<f32> { | ||
Rotation3::from(UnitQuaternion::from(e)) | ||
} | ||
} | ||
|
||
impl From<DQuat> for Rotation3<f64> { | ||
#[inline] | ||
fn from(e: DQuat) -> Rotation3<f64> { | ||
Rotation3::from(UnitQuaternion::from(e)) | ||
} | ||
} |
Oops, something went wrong.