glam-ext 0.4.0

Transform, isometry and more extension types for glam-rs.
Documentation
use glam::{Vec3, Vec4};
#[cfg(feature = "f64")]
use glam::{DVec3, DVec4};

use crate::Vec2xz;
#[cfg(feature = "f64")]
use crate::DVec2xz;

macro_rules! vecxz_swizzles {
    ($type:ident, $vec3:ident, $vec4:ident) => {
        impl $type {
            #[inline]
            pub fn xx(self) -> Self {
                $type::splat(self.x)
            }

            #[inline]
            pub fn zx(self) -> Self {
                $type::new(self.z, self.x)
            }

            #[inline]
            pub fn zz(self) -> Self {
                $type::splat(self.z)
            }

            #[inline]
            pub fn xxx(self) -> $vec3 {
                $vec3::new(self.x, self.x, self.x)
            }

            #[inline]
            pub fn xxz(self) -> $vec3 {
                $vec3::new(self.x, self.x, self.z)
            }

            #[inline]
            pub fn xzx(self) -> $vec3 {
                $vec3::new(self.x, self.z, self.x)
            }

            #[inline]
            pub fn xzz(self) -> $vec3 {
                $vec3::new(self.x, self.z, self.z)
            }

            #[inline]
            pub fn zxx(self) -> $vec3 {
                $vec3::new(self.z, self.x, self.x)
            }

            #[inline]
            pub fn zxz(self) -> $vec3 {
                $vec3::new(self.z, self.x, self.z)
            }

            #[inline]
            pub fn zzx(self) -> $vec3 {
                $vec3::new(self.z, self.z, self.x)
            }

            #[inline]
            pub fn zzz(self) -> $vec3 {
                $vec3::new(self.z, self.z, self.z)
            }

            #[inline]
            pub fn xxxx(self) -> $vec4 {
                $vec4::new(self.x, self.x, self.x, self.x)
            }

            #[inline]
            pub fn xxxz(self) -> $vec4 {
                $vec4::new(self.x, self.x, self.x, self.z)
            }

            #[inline]
            pub fn xxzx(self) -> $vec4 {
                $vec4::new(self.x, self.x, self.z, self.x)
            }

            #[inline]
            pub fn xxzz(self) -> $vec4 {
                $vec4::new(self.x, self.x, self.z, self.z)
            }

            #[inline]
            pub fn xzxx(self) -> $vec4 {
                $vec4::new(self.x, self.z, self.x, self.x)
            }

            #[inline]
            pub fn xzxz(self) -> $vec4 {
                $vec4::new(self.x, self.z, self.x, self.z)
            }

            #[inline]
            pub fn xzzx(self) -> $vec4 {
                $vec4::new(self.x, self.z, self.z, self.x)
            }

            #[inline]
            pub fn xzzz(self) -> $vec4 {
                $vec4::new(self.x, self.z, self.z, self.z)
            }

            #[inline]
            pub fn zxxx(self) -> $vec4 {
                $vec4::new(self.z, self.x, self.x, self.x)
            }

            #[inline]
            pub fn zxxz(self) -> $vec4 {
                $vec4::new(self.z, self.x, self.x, self.z)
            }

            #[inline]
            pub fn zxzx(self) -> $vec4 {
                $vec4::new(self.z, self.x, self.z, self.x)
            }

            #[inline]
            pub fn zxzz(self) -> $vec4 {
                $vec4::new(self.z, self.x, self.z, self.z)
            }

            #[inline]
            pub fn zzxx(self) -> $vec4 {
                $vec4::new(self.z, self.z, self.x, self.x)
            }

            #[inline]
            pub fn zzxz(self) -> $vec4 {
                $vec4::new(self.z, self.z, self.x, self.z)
            }

            #[inline]
            pub fn zzzx(self) -> $vec4 {
                $vec4::new(self.z, self.z, self.z, self.x)
            }

            #[inline]
            pub fn zzzz(self) -> $vec4 {
                $vec4::new(self.z, self.z, self.z, self.z)
            }
        }
    };
}

vecxz_swizzles!(Vec2xz, Vec3, Vec4);
#[cfg(feature = "f64")]
vecxz_swizzles!(DVec2xz, DVec3, DVec4);