fix: grid lines for split ruling edges only in display and export meshes; record the moved seeds (#961)

#921's grid lines through the vertices that split a ruling edge also went into the meshes Boolean operations intersect, which changed seven robustness seeds (seed 2's sphere cut failed). Deflection::rulings now asks for them only in the kernel's own tessellation (display, export, measurement). The seeds #936 (rejected instead of unsupported), #946 (26 and 85 build, others fail differently) and #921's display side (about 1e-6) moved are recorded with their reasons.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
bherbruckandClaude Opus 5.5 authored and GitHub committed 2026-10-14 00:14:18 -04:00
1 parent 774a8b1d9a
commit 00fdcf3e72
4 files changed
+56 -48

No files matched your search

+3 -3
View File
@@ -173,7 +173,7 @@ const MIN_DISPLAY_ANGLE: f64 = std::f64::consts::PI / 180.0;
/// non-manifold shells an import can produce). Boundaries that lie on their surface only within
/// tolerance (imports, boolean results) are projected onto it.
fn mesh_shells(solid: &Solid, tol: f64) -> Vec<MeshedShell> {
mesh_shells_within(solid, Deflection::chord(tol))
mesh_shells_within(solid, Deflection { rulings: true, ..Deflection::chord(tol) })
}
/// [`mesh_shells`] divided by a chord tolerance and, when it has one, a bound on the angle a
@@ -986,9 +986,9 @@ impl Body {
return Ok(m.to_mesh());
}
let deflection = if angle.is_finite() && angle > 0.0 {
Deflection { chord: tol, angle: angle.max(MIN_DISPLAY_ANGLE), floor: tol * DISPLAY_ANGLE_FLOOR }
Deflection { chord: tol, angle: angle.max(MIN_DISPLAY_ANGLE), floor: tol * DISPLAY_ANGLE_FLOOR, rulings: true }
} else {
Deflection::chord(tol)
Deflection { rulings: true, ..Deflection::chord(tol) }
};
guard("tessellate", || {
let meshed = mesh_shells_within(&self.solid, deflection);