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:
1 parent
774a8b1d9a
commit
00fdcf3e72
4 files changed
+56
-48
No files matched your search
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user