Shell and offset faces on bodies of planes and cylinders (filleted boxes, bosses: each face moves along its normal, cylinders change radius, corners and arcs follow); surface classification leaves out singular points (cone apexes); recipes: holes on cylinders drill toward the axis
Oracle: 55/76 (67-76 sheet metal not replayed yet). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL
This commit is contained in:
1 parent
d285cedd73
commit
59685a9180
8 files changed
+417
-95
No files matched your search
@@ -81,7 +81,10 @@ fn refined(pm: &PolygonMesh, surf: &mt::Surface, tol: f64) -> Option<Vec<[(Vec3,
|
||||
}
|
||||
// The parameters must be the surface's own.
|
||||
let check = tris.iter().take(8).flat_map(|t| t.iter()).all(|(p, (u, v), _)| from_p3(surf.subs(*u, *v)).dist(*p) < tol * 4.0 + 1e-9);
|
||||
if !check || tris.len() > 200_000 {
|
||||
// Bounded work: a face may grow to a few times its triangles (wild surfaces sag
|
||||
// everywhere and are left as meshed).
|
||||
let cap = (tris.len() * 8).clamp(2_000, 60_000);
|
||||
if !check || tris.len() > 50_000 {
|
||||
return None;
|
||||
}
|
||||
// Edges on the face's boundary are shared with the next face: never split them.
|
||||
@@ -145,7 +148,7 @@ fn refined(pm: &PolygonMesh, surf: &mt::Surface, tol: f64) -> Option<Vec<[(Vec3,
|
||||
}
|
||||
tris = next;
|
||||
changed |= any;
|
||||
if !any || tris.len() > 400_000 {
|
||||
if !any || tris.len() > cap {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user