fj_core/algorithms/approx/
solid.rs

1//! Solid approximation
2
3use std::collections::BTreeSet;
4
5use crate::{objects::Solid, Core};
6
7use super::{edge::HalfEdgeApproxCache, face::FaceApprox, Approx, Tolerance};
8
9impl Approx for &Solid {
10    type Approximation = BTreeSet<FaceApprox>;
11    type Cache = HalfEdgeApproxCache;
12
13    fn approx_with_cache(
14        self,
15        tolerance: impl Into<Tolerance>,
16        cache: &mut Self::Cache,
17        core: &mut Core,
18    ) -> Self::Approximation {
19        let tolerance = tolerance.into();
20
21        self.shells()
22            .iter()
23            .flat_map(|shell| shell.approx_with_cache(tolerance, cache, core))
24            .collect()
25    }
26}