thanatos 0.1.0

CSG geometries in rust
Documentation
use crate::geometry::base::*;
use min_max::max;
use serde::{Serialize, Deserialize};

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(tag = "type")]
pub struct Difference<A, B>
where A: GeometricPrimitive,
      B: GeometricPrimitive {
  left: A,
  right: B
}

impl<A, B> Difference<A, B>
where A: GeometricPrimitive,
      B: GeometricPrimitive {
  pub fn new(left: A, right: B) -> Self {
    Difference {
      left: left,
      right: right
    }
  }     
}

impl<A, B> GeometricPrimitive for Difference<A, B>
where A: GeometricPrimitive,  
      B: GeometricPrimitive {
  fn bounding_box(&self) -> BoundingBox {
    self.left.bounding_box()
  }

  fn sdf(&self, v: &Point) -> f64 {
    max(self.left.sdf(v), -self.right.sdf(v))
  }
}