diff --git a/crates/kernel/src/planar_sources.rs b/crates/kernel/src/planar_sources.rs index af081a1f58..ad0ee3249c 100644 --- a/crates/kernel/src/planar_sources.rs +++ b/crates/kernel/src/planar_sources.rs @@ -141,6 +141,12 @@ impl Body { self.map_planar_sources(&[input], None, None, &[], false) } + /// Generate distinct outer/inner roles from the exact original supports of + /// an inside shell. Generated rims and curved walls are intentionally absent. + pub(crate) fn with_shell_planar_sources(self, input: &Body, thickness: f64, open: &[Vec3]) -> Result { + self.map_planar_sources(&[input], Some(thickness), None, open, false) + } + /// Retain exact shell roles, and construction roles for Cut, only on unchanged /// supports without a competing coplanar tool. No imported or fitted role is inferred. pub(crate) fn with_preserved_boolean_planar_sources(self, input: &Body, tool: &Body, constructed: bool) -> Result { diff --git a/crates/kernel/src/polyhedron.rs b/crates/kernel/src/polyhedron.rs index 5b966f9cd4..4b895bce97 100644 --- a/crates/kernel/src/polyhedron.rs +++ b/crates/kernel/src/polyhedron.rs @@ -185,10 +185,12 @@ fn polyhedron_record(hs: &[HalfSpace], verts: &[Vec3], faces: &[(usize, Vec Result { let _span = solidcraft_profile::span("kernel", "shell"); - crate::offset_backend::shell(b, open, thickness) + crate::offset_backend::shell(b, open, thickness)?.with_shell_planar_sources(b, thickness, open) } /// Tilt the faces near `faces` by `angle` about their line on the neutral plane, so that they