CartesianTree 0.3.0

Build hierarchical Cartesian coordinate systems to easily transform poses.
Documentation
use nalgebra::{Isometry3, Translation3};

#[derive(Clone)]
pub struct LazyTranslation {
    pub(crate) inner: Isometry3<f64>,
}

#[derive(Clone)]
pub struct LazyRotation {
    pub(crate) inner: Isometry3<f64>,
}

#[must_use]
pub fn x(value: f64) -> LazyTranslation {
    LazyTranslation {
        inner: Isometry3::from_parts(
            Translation3::new(value, 0.0, 0.0),
            nalgebra::UnitQuaternion::identity(),
        ),
    }
}

#[must_use]
pub fn y(value: f64) -> LazyTranslation {
    LazyTranslation {
        inner: Isometry3::from_parts(
            Translation3::new(0.0, value, 0.0),
            nalgebra::UnitQuaternion::identity(),
        ),
    }
}

#[must_use]
pub fn z(value: f64) -> LazyTranslation {
    LazyTranslation {
        inner: Isometry3::from_parts(
            Translation3::new(0.0, 0.0, value),
            nalgebra::UnitQuaternion::identity(),
        ),
    }
}

#[must_use]
pub fn rx(value: f64) -> LazyRotation {
    LazyRotation {
        inner: Isometry3::from_parts(
            Translation3::new(0.0, 0.0, 0.0),
            nalgebra::UnitQuaternion::from_euler_angles(value, 0.0, 0.0),
        ),
    }
}

#[must_use]
pub fn ry(value: f64) -> LazyRotation {
    LazyRotation {
        inner: Isometry3::from_parts(
            Translation3::new(0.0, 0.0, 0.0),
            nalgebra::UnitQuaternion::from_euler_angles(0.0, value, 0.0),
        ),
    }
}

#[must_use]
pub fn rz(value: f64) -> LazyRotation {
    LazyRotation {
        inner: Isometry3::from_parts(
            Translation3::new(0.0, 0.0, 0.0),
            nalgebra::UnitQuaternion::from_euler_angles(0.0, 0.0, value),
        ),
    }
}