conspire/geometry/mesh/remesh/
mod.rs1#[cfg(test)]
2mod test;
3
4mod adaptive;
5mod triangles;
6mod uniform;
7
8use crate::{
9 geometry::mesh::Mesh,
10 math::{Quantity, Scalar},
11 units::Length,
12};
13
14const D: usize = 3;
15
16pub struct Remeshing {
18 pub iterations: usize,
20 pub metric: RemeshingMetric,
22}
23
24pub enum RemeshingMetric {
26 Isotropic(IsotropicSizing),
28 Anisotropic(AnisotropicSizing),
30}
31
32pub enum IsotropicSizing {
34 Uniform { length: Option<Quantity<Length>> },
36 Adaptive {
38 tolerance: Quantity<Length>,
39 minimum: Quantity<Length>,
40 maximum: Quantity<Length>,
41 gradation: Scalar,
42 },
43}
44
45pub enum AnisotropicSizing {
47 Uniform,
48 Adaptive,
49}
50
51impl Mesh<D> {
52 pub fn remesh(self, remeshing: Remeshing) -> Result<Self, &'static str> {
53 let Remeshing { iterations, metric } = remeshing;
54 match metric {
55 RemeshingMetric::Isotropic(sizing) => match sizing {
56 IsotropicSizing::Uniform { length } => self.uniform_remesh(iterations, length),
57 IsotropicSizing::Adaptive {
58 tolerance,
59 minimum,
60 maximum,
61 gradation,
62 } => self.adaptive_remesh(iterations, tolerance, minimum, maximum, gradation),
63 },
64 RemeshingMetric::Anisotropic(_) => Err("anisotropic remeshing is not implemented yet"),
65 }
66 }
67}