perf: prism pairs before the mesh, bodies measured once, and a STEP import that copies less (#714)

A cut or an intersection between prisms (a plate and the tools through it) is now decided in 2D before either operand is meshed. A body's size and volume are measured once, a placement reads its orientation from its matrix, the evaluation cache is bounded to 64 MiB, and STEP import copies fewer shells. Hole plates evaluate 20-30% faster with less memory, and models are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
SahenandClaude Opus 5.5 authored and GitHub committed 2026-10-13 10:55:56 -04:00
1 parent a1cb8d4d36
commit 2bb24d1d2a
13 files changed
+630 -71

No files matched your search

+14
View File
@@ -136,6 +136,20 @@ pub(crate) fn build(
Ok(traced(Body::new(solid)?, counts, faces, edges))
}
/// [`build`] for a solid made by placing an already-oriented copy: the orientation comes from
/// the placement matrix instead of meshing the whole solid again (see
/// [`crate::body::Body::new_placed`]).
pub(crate) fn build_placed(
solid: crate::body::Solid,
counts: &[(usize, usize)],
faces: Option<Vec<FaceProv>>,
edges: Option<&HashMap<mt::EdgeID, Vec<EdgeOrigin>>>,
flip: bool,
coarse: Option<(f64, usize)>,
) -> Result<Body> {
Ok(traced(Body::new_placed(solid, flip, coarse)?, counts, faces, edges))
}
/// The origins of `body`'s edges by identity, from its history `h` (edges in its edge order).
pub(crate) fn edges_by_identity<'a>(body: &'a Body, h: &'a History) -> impl Iterator<Item = (mt::EdgeID, Vec<EdgeOrigin>)> + 'a {
edge_order(body.solid.face_iter()).0.into_iter().zip(&h.edges).map(|(e, p)| (e.id(), p.origins.clone()))