Booleans: a face crossed by nested intersection loops (both walls of a tube) gives each hole to the innermost piece holding it (vendored shapeops; tubes and tori cut across now work); revolved full circles start at an odd angle so their seams don't lie in common cut planes

Oracle: 70/76.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL
This commit is contained in:
bherbruckandClaude Opus 5.5 committed 2026-10-08 05:59:28 +00:00
1 parent 89c2c440ac
commit 5539de8fd4
4 files changed
+70 -3

No files matched your search

+10 -1
View File
@@ -86,7 +86,16 @@ where
}
negative_wires.into_iter().try_for_each(|chunk| {
let pt = chunk.poly.front();
let op = crate::tr!(pre_faces.iter_mut().find(|face| face[0].poly.include(pt)), "loop not inside any face piece");
// SolveCraft: the innermost piece that holds the loop (nested intersection loops, such
// as both walls of a tube crossing one face), never the loop's own twin.
let hole = -chunk.poly.area();
let op = crate::tr!(
pre_faces
.iter_mut()
.filter(|face| face[0].poly.area() > hole * (1.0 + 1e-6) && face[0].poly.include(pt))
.min_by(|x, y| x[0].poly.area().total_cmp(&y[0].poly.area())),
"loop not inside any face piece"
);
op.push(chunk);
Some(())
})?;