grana-object 0.1.1

Next-generation microscopy image visualization and analysis platform
Documentation
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct Bounds {
    min: [f32; 3],
    max: [f32; 3],
}

impl Bounds {
    pub fn new(min: [f32; 3], max: [f32; 3]) -> Self {
        assert!(
            min.iter().chain(max.iter()).all(|value| value.is_finite()),
            "bounds are finite"
        );
        assert!(
            (0..3).all(|axis| min[axis] <= max[axis]),
            "bounds are ordered"
        );
        Self { min, max }
    }

    pub fn min(self) -> [f32; 3] {
        self.min
    }

    pub fn max(self) -> [f32; 3] {
        self.max
    }

    pub fn center(self) -> [f32; 3] {
        [0, 1, 2].map(|axis| 0.5 * (self.min[axis] + self.max[axis]))
    }

    pub fn size(self) -> [f32; 3] {
        [0, 1, 2].map(|axis| self.max[axis] - self.min[axis])
    }

    pub fn contains(self, point: [f32; 3]) -> bool {
        (0..3).all(|axis| self.min[axis] <= point[axis] && point[axis] <= self.max[axis])
    }
}