Merge pull request #900 from dimforge/glam-multiversion
Support multiple version of the optional glam conversion
This commit is contained in:
commit
de705a8072
10
Cargo.toml
10
Cargo.toml
|
@ -36,9 +36,10 @@ macros = [ "nalgebra-macros" ]
|
||||||
|
|
||||||
# Conversion
|
# Conversion
|
||||||
convert-mint = [ "mint" ]
|
convert-mint = [ "mint" ]
|
||||||
convert-glam = [ "glam" ]
|
|
||||||
convert-glam-unchecked = [ "convert-glam" ] # Enable edgy conversions like Mat4 -> Isometry3
|
|
||||||
convert-bytemuck = [ "bytemuck" ]
|
convert-bytemuck = [ "bytemuck" ]
|
||||||
|
convert-glam013 = [ "glam013" ]
|
||||||
|
convert-glam014 = [ "glam014" ]
|
||||||
|
convert-glam015 = [ "glam015" ]
|
||||||
|
|
||||||
# Serialization
|
# Serialization
|
||||||
## To use serde in a #[no-std] environment, enable the
|
## To use serde in a #[no-std] environment, enable the
|
||||||
|
@ -78,13 +79,16 @@ serde = { version = "1.0", default-features = false, features = [ "deri
|
||||||
abomonation = { version = "0.7", optional = true }
|
abomonation = { version = "0.7", optional = true }
|
||||||
rkyv = { version = "~0.6.4", default-features = false, features = ["const_generics"], optional = true }
|
rkyv = { version = "~0.6.4", default-features = false, features = ["const_generics"], optional = true }
|
||||||
mint = { version = "0.5", optional = true }
|
mint = { version = "0.5", optional = true }
|
||||||
glam = { version = "0.13", optional = true }
|
|
||||||
quickcheck = { version = "1", optional = true }
|
quickcheck = { version = "1", optional = true }
|
||||||
pest = { version = "2", optional = true }
|
pest = { version = "2", optional = true }
|
||||||
pest_derive = { version = "2", optional = true }
|
pest_derive = { version = "2", optional = true }
|
||||||
bytemuck = { version = "1.5", optional = true }
|
bytemuck = { version = "1.5", optional = true }
|
||||||
matrixcompare-core = { version = "0.1", optional = true }
|
matrixcompare-core = { version = "0.1", optional = true }
|
||||||
proptest = { version = "1", optional = true, default-features = false, features = ["std"] }
|
proptest = { version = "1", optional = true, default-features = false, features = ["std"] }
|
||||||
|
glam013 = { package = "glam", version = "0.13", optional = true }
|
||||||
|
glam014 = { package = "glam", version = "0.14", optional = true }
|
||||||
|
glam015 = { package = "glam", version = "0.15", optional = true }
|
||||||
|
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
|
|
|
@ -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(())
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
use crate::storage::Storage;
|
use super::glam::{
|
||||||
use crate::{Matrix, Matrix2, Matrix3, Matrix4, Vector, Vector2, Vector3, Vector4, U2, U3, U4};
|
|
||||||
use glam::{
|
|
||||||
BVec2, BVec3, BVec4, DMat2, DMat3, DMat4, DVec2, DVec3, DVec4, IVec2, IVec3, IVec4, Mat2, Mat3,
|
BVec2, BVec3, BVec4, DMat2, DMat3, DMat4, DVec2, DVec3, DVec4, IVec2, IVec3, IVec4, Mat2, Mat3,
|
||||||
Mat4, UVec2, UVec3, UVec4, Vec2, Vec3, Vec3A, Vec4,
|
Mat4, UVec2, UVec3, UVec4, Vec2, Vec3, Vec3A, Vec4,
|
||||||
};
|
};
|
||||||
|
use crate::storage::Storage;
|
||||||
|
use crate::{Matrix, Matrix2, Matrix3, Matrix4, Vector, Vector2, Vector3, Vector4, U2, U3, U4};
|
||||||
|
|
||||||
macro_rules! impl_vec_conversion(
|
macro_rules! impl_vec_conversion(
|
||||||
($N: ty, $Vec2: ty, $Vec3: ty, $Vec4: ty) => {
|
($N: ty, $Vec2: ty, $Vec3: ty, $Vec4: ty) => {
|
|
@ -1,8 +1,8 @@
|
||||||
use crate::{Point2, Point3, Point4};
|
use super::glam::{
|
||||||
use glam::{
|
|
||||||
BVec2, BVec3, BVec4, DVec2, DVec3, DVec4, IVec2, IVec3, IVec4, UVec2, UVec3, UVec4, Vec2, Vec3,
|
BVec2, BVec3, BVec4, DVec2, DVec3, DVec4, IVec2, IVec3, IVec4, UVec2, UVec3, UVec4, Vec2, Vec3,
|
||||||
Vec3A, Vec4,
|
Vec3A, Vec4,
|
||||||
};
|
};
|
||||||
|
use crate::{Point2, Point3, Point4};
|
||||||
|
|
||||||
macro_rules! impl_point_conversion(
|
macro_rules! impl_point_conversion(
|
||||||
($N: ty, $Vec2: ty, $Vec3: ty, $Vec4: ty) => {
|
($N: ty, $Vec2: ty, $Vec3: ty, $Vec4: ty) => {
|
|
@ -1,5 +1,5 @@
|
||||||
|
use super::glam::{DQuat, Quat};
|
||||||
use crate::{Quaternion, UnitQuaternion};
|
use crate::{Quaternion, UnitQuaternion};
|
||||||
use glam::{DQuat, Quat};
|
|
||||||
|
|
||||||
impl From<Quat> for Quaternion<f32> {
|
impl From<Quat> for Quaternion<f32> {
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -43,22 +43,16 @@ impl From<UnitQuaternion<f64>> for DQuat {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "convert-glam-unchecked")]
|
|
||||||
mod unchecked {
|
|
||||||
use crate::{Quaternion, UnitQuaternion};
|
|
||||||
use glam::{DQuat, Quat};
|
|
||||||
|
|
||||||
impl From<Quat> for UnitQuaternion<f32> {
|
impl From<Quat> for UnitQuaternion<f32> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(e: Quat) -> UnitQuaternion<f32> {
|
fn from(e: Quat) -> UnitQuaternion<f32> {
|
||||||
UnitQuaternion::new_unchecked(Quaternion::from(e))
|
UnitQuaternion::new_normalize(Quaternion::from(e))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<DQuat> for UnitQuaternion<f64> {
|
impl From<DQuat> for UnitQuaternion<f64> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(e: DQuat) -> UnitQuaternion<f64> {
|
fn from(e: DQuat) -> UnitQuaternion<f64> {
|
||||||
UnitQuaternion::new_unchecked(Quaternion::from(e))
|
UnitQuaternion::new_normalize(Quaternion::from(e))
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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))
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
use super::glam::{DMat3, DMat4, Mat3, Mat4};
|
||||||
|
use crate::{Matrix3, Matrix4, Similarity2, Similarity3};
|
||||||
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
|
impl From<Similarity2<f32>> for Mat3 {
|
||||||
|
fn from(iso: Similarity2<f32>) -> Mat3 {
|
||||||
|
iso.to_homogeneous().into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl From<Similarity3<f32>> for Mat4 {
|
||||||
|
fn from(iso: Similarity3<f32>) -> Mat4 {
|
||||||
|
iso.to_homogeneous().into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Similarity2<f64>> for DMat3 {
|
||||||
|
fn from(iso: Similarity2<f64>) -> DMat3 {
|
||||||
|
iso.to_homogeneous().into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl From<Similarity3<f64>> for DMat4 {
|
||||||
|
fn from(iso: Similarity3<f64>) -> DMat4 {
|
||||||
|
iso.to_homogeneous().into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Mat3> for Similarity2<f32> {
|
||||||
|
type Error = ();
|
||||||
|
fn try_from(mat3: Mat3) -> Result<Similarity2<f32>, ()> {
|
||||||
|
crate::try_convert(Matrix3::from(mat3)).ok_or(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Mat4> for Similarity3<f32> {
|
||||||
|
type Error = ();
|
||||||
|
fn try_from(mat4: Mat4) -> Result<Similarity3<f32>, ()> {
|
||||||
|
crate::try_convert(Matrix4::from(mat4)).ok_or(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<DMat3> for Similarity2<f64> {
|
||||||
|
type Error = ();
|
||||||
|
fn try_from(mat3: DMat3) -> Result<Similarity2<f64>, ()> {
|
||||||
|
crate::try_convert(Matrix3::from(mat3)).ok_or(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<DMat4> for Similarity3<f64> {
|
||||||
|
type Error = ();
|
||||||
|
fn try_from(mat4: DMat4) -> Result<Similarity3<f64>, ()> {
|
||||||
|
crate::try_convert(Matrix4::from(mat4)).ok_or(())
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
|
use super::glam::{DVec2, DVec3, DVec4, Vec2, Vec3, Vec3A, Vec4};
|
||||||
use crate::{Translation2, Translation3, Translation4};
|
use crate::{Translation2, Translation3, Translation4};
|
||||||
use glam::{DVec2, DVec3, DVec4, Vec2, Vec3, Vec3A, Vec4};
|
|
||||||
|
|
||||||
macro_rules! impl_translation_conversion(
|
macro_rules! impl_translation_conversion(
|
||||||
($N: ty, $Vec2: ty, $Vec3: ty, $Vec4: ty) => {
|
($N: ty, $Vec2: ty, $Vec3: ty, $Vec4: ty) => {
|
|
@ -0,0 +1,30 @@
|
||||||
|
use super::glam::{DMat2, Mat2};
|
||||||
|
use crate::{Complex, Rotation2, UnitComplex};
|
||||||
|
|
||||||
|
impl From<UnitComplex<f32>> for Mat2 {
|
||||||
|
#[inline]
|
||||||
|
fn from(e: UnitComplex<f32>) -> Mat2 {
|
||||||
|
e.to_rotation_matrix().into_inner().into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<UnitComplex<f64>> for DMat2 {
|
||||||
|
#[inline]
|
||||||
|
fn from(e: UnitComplex<f64>) -> DMat2 {
|
||||||
|
e.to_rotation_matrix().into_inner().into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Mat2> for UnitComplex<f32> {
|
||||||
|
#[inline]
|
||||||
|
fn from(e: Mat2) -> UnitComplex<f32> {
|
||||||
|
UnitComplex::new_normalize(Complex::new(e.x_axis.x, e.x_axis.y))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<DMat2> for UnitComplex<f64> {
|
||||||
|
#[inline]
|
||||||
|
fn from(e: DMat2) -> UnitComplex<f64> {
|
||||||
|
UnitComplex::new_normalize(Complex::new(e.x_axis.x, e.x_axis.y))
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,118 +0,0 @@
|
||||||
use crate::{Isometry2, Isometry3};
|
|
||||||
use glam::{DMat3, DMat4, DQuat, DVec3, Mat3, Mat4, Quat, Vec3};
|
|
||||||
|
|
||||||
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::new(0.0, 0.0, 1.0), 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::new(0.0, 0.0, 1.0), iso.rotation.angle());
|
|
||||||
(tra, rot)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "convert-glam-unchecked")]
|
|
||||||
mod unchecked {
|
|
||||||
use crate::{Isometry2, Isometry3, Matrix3, Matrix4};
|
|
||||||
use glam::{DMat3, DMat4, DQuat, DVec2, DVec3, Mat3, Mat4, Quat, Vec2, Vec3};
|
|
||||||
|
|
||||||
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.x, tra.y].into(), rot.to_axis_angle().1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<(DVec2, DQuat)> for Isometry2<f64> {
|
|
||||||
fn from((tra, rot): (DVec2, DQuat)) -> Self {
|
|
||||||
Isometry2::new([tra.x, tra.y].into(), rot.to_axis_angle().1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Mat3> for Isometry2<f32> {
|
|
||||||
fn from(mat3: Mat3) -> Isometry2<f32> {
|
|
||||||
crate::convert_unchecked(Matrix3::from(mat3))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Mat4> for Isometry3<f32> {
|
|
||||||
fn from(mat4: Mat4) -> Isometry3<f32> {
|
|
||||||
crate::convert_unchecked(Matrix4::from(mat4))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<DMat3> for Isometry2<f64> {
|
|
||||||
fn from(mat3: DMat3) -> Isometry2<f64> {
|
|
||||||
crate::convert_unchecked(Matrix3::from(mat3))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<DMat4> for Isometry3<f64> {
|
|
||||||
fn from(mat4: DMat4) -> Isometry3<f64> {
|
|
||||||
crate::convert_unchecked(Matrix4::from(mat4))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,64 +0,0 @@
|
||||||
use crate::{Rotation2, Rotation3, UnitQuaternion};
|
|
||||||
use glam::{DMat2, DQuat, Mat2, Quat};
|
|
||||||
|
|
||||||
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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "convert-glam-unchecked")]
|
|
||||||
mod unchecked {
|
|
||||||
use crate::{Rotation2, Rotation3, UnitQuaternion};
|
|
||||||
use glam::{DMat2, DQuat, Mat2, Quat};
|
|
||||||
|
|
||||||
impl From<Mat2> for Rotation2<f32> {
|
|
||||||
#[inline]
|
|
||||||
fn from(e: Mat2) -> Rotation2<f32> {
|
|
||||||
Rotation2::from_matrix_unchecked(e.into())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<DMat2> for Rotation2<f64> {
|
|
||||||
#[inline]
|
|
||||||
fn from(e: DMat2) -> Rotation2<f64> {
|
|
||||||
Rotation2::from_matrix_unchecked(e.into())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
use crate::{Similarity2, Similarity3};
|
|
||||||
use glam::{DMat3, DMat4, Mat3, Mat4};
|
|
||||||
|
|
||||||
impl From<Similarity2<f32>> for Mat3 {
|
|
||||||
fn from(iso: Similarity2<f32>) -> Mat3 {
|
|
||||||
iso.to_homogeneous().into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl From<Similarity3<f32>> for Mat4 {
|
|
||||||
fn from(iso: Similarity3<f32>) -> Mat4 {
|
|
||||||
iso.to_homogeneous().into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Similarity2<f64>> for DMat3 {
|
|
||||||
fn from(iso: Similarity2<f64>) -> DMat3 {
|
|
||||||
iso.to_homogeneous().into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl From<Similarity3<f64>> for DMat4 {
|
|
||||||
fn from(iso: Similarity3<f64>) -> DMat4 {
|
|
||||||
iso.to_homogeneous().into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "convert-glam-unchecked")]
|
|
||||||
mod unchecked {
|
|
||||||
use crate::{Matrix3, Matrix4, Similarity2, Similarity3};
|
|
||||||
use glam::{DMat3, DMat4, Mat3, Mat4};
|
|
||||||
|
|
||||||
impl From<Mat3> for Similarity2<f32> {
|
|
||||||
fn from(mat3: Mat3) -> Similarity2<f32> {
|
|
||||||
crate::convert_unchecked(Matrix3::from(mat3))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Mat4> for Similarity3<f32> {
|
|
||||||
fn from(mat4: Mat4) -> Similarity3<f32> {
|
|
||||||
crate::convert_unchecked(Matrix4::from(mat4))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<DMat3> for Similarity2<f64> {
|
|
||||||
fn from(mat3: DMat3) -> Similarity2<f64> {
|
|
||||||
crate::convert_unchecked(Matrix3::from(mat3))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<DMat4> for Similarity3<f64> {
|
|
||||||
fn from(mat4: DMat4) -> Similarity3<f64> {
|
|
||||||
crate::convert_unchecked(Matrix4::from(mat4))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
use crate::UnitComplex;
|
|
||||||
use glam::{DMat2, Mat2};
|
|
||||||
|
|
||||||
impl From<UnitComplex<f32>> for Mat2 {
|
|
||||||
#[inline]
|
|
||||||
fn from(e: UnitComplex<f32>) -> Mat2 {
|
|
||||||
e.to_rotation_matrix().into_inner().into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<UnitComplex<f64>> for DMat2 {
|
|
||||||
#[inline]
|
|
||||||
fn from(e: UnitComplex<f64>) -> DMat2 {
|
|
||||||
e.to_rotation_matrix().into_inner().into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "convert-glam-unchecked")]
|
|
||||||
mod unchecked {
|
|
||||||
use crate::{Rotation2, UnitComplex};
|
|
||||||
use glam::{DMat2, Mat2};
|
|
||||||
|
|
||||||
impl From<Mat2> for UnitComplex<f32> {
|
|
||||||
#[inline]
|
|
||||||
fn from(e: Mat2) -> UnitComplex<f32> {
|
|
||||||
Rotation2::from_matrix_unchecked(e.into()).into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<DMat2> for UnitComplex<f64> {
|
|
||||||
#[inline]
|
|
||||||
fn from(e: DMat2) -> UnitComplex<f64> {
|
|
||||||
Rotation2::from_matrix_unchecked(e.into()).into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,8 +1,6 @@
|
||||||
mod glam_isometry;
|
#[cfg(feature = "glam013")]
|
||||||
mod glam_matrix;
|
mod v013;
|
||||||
mod glam_point;
|
#[cfg(feature = "glam014")]
|
||||||
mod glam_quaternion;
|
mod v014;
|
||||||
mod glam_rotation;
|
#[cfg(feature = "glam015")]
|
||||||
mod glam_similarity;
|
mod v015;
|
||||||
mod glam_translation;
|
|
||||||
mod glam_unit_complex;
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
#[path = "../common/glam_isometry.rs"]
|
||||||
|
mod glam_isometry;
|
||||||
|
#[path = "../common/glam_matrix.rs"]
|
||||||
|
mod glam_matrix;
|
||||||
|
#[path = "../common/glam_point.rs"]
|
||||||
|
mod glam_point;
|
||||||
|
#[path = "../common/glam_quaternion.rs"]
|
||||||
|
mod glam_quaternion;
|
||||||
|
#[path = "../common/glam_rotation.rs"]
|
||||||
|
mod glam_rotation;
|
||||||
|
#[path = "../common/glam_similarity.rs"]
|
||||||
|
mod glam_similarity;
|
||||||
|
#[path = "../common/glam_translation.rs"]
|
||||||
|
mod glam_translation;
|
||||||
|
#[path = "../common/glam_unit_complex.rs"]
|
||||||
|
mod glam_unit_complex;
|
||||||
|
|
||||||
|
pub(self) use glam013 as glam;
|
|
@ -0,0 +1,18 @@
|
||||||
|
#[path = "../common/glam_isometry.rs"]
|
||||||
|
mod glam_isometry;
|
||||||
|
#[path = "../common/glam_matrix.rs"]
|
||||||
|
mod glam_matrix;
|
||||||
|
#[path = "../common/glam_point.rs"]
|
||||||
|
mod glam_point;
|
||||||
|
#[path = "../common/glam_quaternion.rs"]
|
||||||
|
mod glam_quaternion;
|
||||||
|
#[path = "../common/glam_rotation.rs"]
|
||||||
|
mod glam_rotation;
|
||||||
|
#[path = "../common/glam_similarity.rs"]
|
||||||
|
mod glam_similarity;
|
||||||
|
#[path = "../common/glam_translation.rs"]
|
||||||
|
mod glam_translation;
|
||||||
|
#[path = "../common/glam_unit_complex.rs"]
|
||||||
|
mod glam_unit_complex;
|
||||||
|
|
||||||
|
pub(self) use glam014 as glam;
|
|
@ -0,0 +1,18 @@
|
||||||
|
#[path = "../common/glam_isometry.rs"]
|
||||||
|
mod glam_isometry;
|
||||||
|
#[path = "../common/glam_matrix.rs"]
|
||||||
|
mod glam_matrix;
|
||||||
|
#[path = "../common/glam_point.rs"]
|
||||||
|
mod glam_point;
|
||||||
|
#[path = "../common/glam_quaternion.rs"]
|
||||||
|
mod glam_quaternion;
|
||||||
|
#[path = "../common/glam_rotation.rs"]
|
||||||
|
mod glam_rotation;
|
||||||
|
#[path = "../common/glam_similarity.rs"]
|
||||||
|
mod glam_similarity;
|
||||||
|
#[path = "../common/glam_translation.rs"]
|
||||||
|
mod glam_translation;
|
||||||
|
#[path = "../common/glam_unit_complex.rs"]
|
||||||
|
mod glam_unit_complex;
|
||||||
|
|
||||||
|
pub(self) use glam015 as glam;
|
|
@ -1,6 +1,5 @@
|
||||||
#[cfg(feature = "alga")]
|
#[cfg(feature = "alga")]
|
||||||
mod alga;
|
mod alga;
|
||||||
#[cfg(feature = "glam")]
|
|
||||||
mod glam;
|
mod glam;
|
||||||
#[cfg(feature = "mint")]
|
#[cfg(feature = "mint")]
|
||||||
mod mint;
|
mod mint;
|
||||||
|
|
Loading…
Reference in New Issue