fix(kernel): preserve intentional Split Face lines in contact joins (#782)

Intentional Split Face lines survive a join with partial planar contact, so the far face stays in two pieces. Follow-up to #704 / #674.
This commit is contained in:
selune authored and GitHub committed 2026-10-13 12:46:34 -04:00
1 parent beca7eb126
commit 293d660d6c
6 files changed
+120 -1

No files matched your search

+3 -1
View File
@@ -716,7 +716,9 @@ pub(crate) fn glue(a: &Body, b: &Body) -> Option<Result<Body>> {
let from: Vec<FaceProv> = solid.face_iter().filter_map(|f| prov.get(&f.id()).cloned()).collect();
// Each edge's origins in the solid's edge order.
let origins = crate::body::edge_order(solid.face_iter()).0.iter().map(|e| origins.get(&e.id()).cloned()).collect();
crate::boolean_record::heal_build(solid, size, &[], Some(from), origins, &record::counts(&[a, b]))
let keep: Vec<_> = a.split_keep().iter().chain(b.split_keep()).cloned().collect();
crate::boolean_record::heal_build(solid, size, &keep, Some(from), origins, &record::counts(&[a, b]))
.map(|body| body.with_split_lines(Some(std::sync::Arc::new(keep))))
}))
}