use axiolid_brep::ExactBRep;
use axiolid_core::Tolerance;
use axiolid_mesh::TriMesh;
use axiolid_tessellation_contract::TessellatedMesh;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum GenerationRequest {
ExactBRep,
Tessellation(TessellationRequest),
}
impl GenerationRequest {
pub const fn requires_exact_brep(self) -> bool {
matches!(self, Self::ExactBRep)
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct TessellationRequest {
tolerance: Tolerance,
}
impl TessellationRequest {
pub const fn new(tolerance: Tolerance) -> Self {
Self { tolerance }
}
pub const fn tolerance(self) -> Tolerance {
self.tolerance
}
#[must_use]
pub const fn bind(self, mesh: TriMesh) -> TessellatedMesh {
TessellatedMesh::new(mesh, self.tolerance)
}
}
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub enum GeneratedGeometry {
ExactBRep(ExactBRep),
Tessellation(TessellatedMesh),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GenerationOutput {
ExactBRep,
Tessellation,
}
impl GeneratedGeometry {
pub const fn output(&self) -> GenerationOutput {
match self {
Self::ExactBRep(_) => GenerationOutput::ExactBRep,
Self::Tessellation(_) => GenerationOutput::Tessellation,
}
}
}