mod adaptive;
mod triangles;
mod uniform;
use crate::{geometry::mesh::Mesh, math::Scalar};
const D: usize = 3;
pub struct Remeshing {
pub iterations: usize,
pub metric: RemeshingMetric,
}
pub enum RemeshingMetric {
Isotropic(IsotropicSizing),
Anisotropic(AnisotropicSizing),
}
pub enum IsotropicSizing {
Uniform { length: Option<Scalar> },
Adaptive {
tolerance: Scalar,
minimum: Scalar,
maximum: Scalar,
gradation: Scalar,
},
}
pub enum AnisotropicSizing {
Uniform,
Adaptive,
}
impl Mesh<D> {
pub fn remesh(self, remeshing: Remeshing) -> Result<Self, &'static str> {
let Remeshing { iterations, metric } = remeshing;
match metric {
RemeshingMetric::Isotropic(sizing) => match sizing {
IsotropicSizing::Uniform { length } => self.uniform_remesh(iterations, length),
IsotropicSizing::Adaptive {
tolerance,
minimum,
maximum,
gradation,
} => self.adaptive_remesh(iterations, tolerance, minimum, maximum, gradation),
},
RemeshingMetric::Anisotropic(_) => Err("anisotropic remeshing is not implemented yet"),
}
}
}