solidrs 0.4.0

Rust library to generate openScad models. Inspired by SolidPython.
Documentation
use crate::{
    element::{Element, InnerElement},
    var::Arg,
    Val,
};

impl Element {
    #[must_use]
    pub fn translate(&self, x: impl Arg, y: impl Arg, z: impl Arg) -> Self {
        let (x, y, z) = (x.val(), y.val(), z.val());
        let inner = match &self.0 {
            InnerElement::Translate {
                x: ix,
                y: iy,
                z: iz,
                child,
            } => InnerElement::Translate {
                x: Val::Calc(ix.clone() + x),
                y: Val::Calc(iy.clone() + y),
                z: Val::Calc(iz.clone() + z),
                child: child.clone(),
            },
            child => InnerElement::Translate {
                x,
                y,
                z,
                child: Box::new(child.clone()),
            },
        };
        Element(inner)
    }

    #[must_use]
    pub fn rotate(&self, x: impl Arg, y: impl Arg, z: impl Arg) -> Self {
        let (x, y, z) = (x.val(), y.val(), z.val());
        let inner = match &self.0 {
            InnerElement::Rotate {
                x: ix,
                y: iy,
                z: iz,
                child,
            } => InnerElement::Rotate {
                x: Val::Calc(ix.clone() + x),
                y: Val::Calc(iy.clone() + y),
                z: Val::Calc(iz.clone() + z),
                child: child.clone(),
            },
            child => InnerElement::Rotate {
                x,
                y,
                z,
                child: Box::new(child.clone()),
            },
        };
        Element(inner)
    }
}