use super::*;
pub struct Cuboid<T> {
pub min: Point3D<T>,
pub max: Point3D<T>,
}
impl<T> Debug for Cuboid<T>
where
T: Debug + Clone + Sub<Output = T>,
{
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Cuboid")
.field("origin", &self.origin())
.field("width", &self.width())
.field("height", &self.height())
.field("length", &self.length())
.finish()
}
}
impl<T> Cuboid<T> {
pub fn origin(&self) -> Point3D<&T> {
self.min.ref_inner()
}
pub fn width(&self) -> T
where
T: Clone + Sub<Output = T>,
{
self.max.x.clone() - self.min.x.clone()
}
pub fn height(&self) -> T
where
T: Clone + Sub<Output = T>,
{
self.max.y.clone() - self.min.y.clone()
}
pub fn length(&self) -> T
where
T: Clone + Sub<Output = T>,
{
self.max.z.clone() - self.min.z.clone()
}
}