conspire/geometry/mesh/remesh/
mod.rs1mod adaptive;
2#[cfg(test)]
3mod test;
4mod triangles;
5mod uniform;
6
7use crate::{geometry::mesh::Mesh, math::Scalar};
8
9const D: usize = 3;
10
11pub struct Remeshing {
13 pub iterations: usize,
15 pub metric: RemeshingMetric,
17}
18
19pub enum RemeshingMetric {
21 Isotropic(IsotropicSizing),
23 Anisotropic(AnisotropicSizing),
25}
26
27pub enum IsotropicSizing {
29 Uniform { length: Option<Scalar> },
31 Adaptive {
33 tolerance: Scalar,
34 minimum: Scalar,
35 maximum: Scalar,
36 gradation: Scalar,
37 },
38}
39
40pub enum AnisotropicSizing {
42 Uniform,
43 Adaptive,
44}
45
46impl Mesh<D> {
47 pub fn remesh(self, remeshing: Remeshing) -> Result<Self, &'static str> {
48 let Remeshing { iterations, metric } = remeshing;
49 match metric {
50 RemeshingMetric::Isotropic(sizing) => match sizing {
51 IsotropicSizing::Uniform { length } => self.uniform_remesh(iterations, length),
52 IsotropicSizing::Adaptive {
53 tolerance,
54 minimum,
55 maximum,
56 gradation,
57 } => self.adaptive_remesh(iterations, tolerance, minimum, maximum, gradation),
58 },
59 RemeshingMetric::Anisotropic(_) => Err("anisotropic remeshing is not implemented yet"),
60 }
61 }
62}