mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-05 11:35:55 +00:00
743accca7a
* claim: #4031 * Triangulation: split a crossing boundary segment ourselves, never in spade's assert (#4031) A trimmed face's boundary segment that crosses a constraint already in the triangulation went to spade's add_constraint_and_split, which asserts (cdt.rs:978, `!previous_region.is_empty() || from == final_vertex`) when a split lands so near another vertex or constraint that the piece up to it is blocked. The kernel guard caught it, but the whole operation failed and a crash report was written; a STEP body imported empty or not at all (#4598, also #4293, #4478, #5068, #5229). PolyBoundary::add_constraints now adds every segment that can be added, then splits each blocked one itself: a vertex at each crossing, inserted from the crossed edge's own vertex, and the pieces between added where they can be. A segment with crowded or very many crossings, or a face with more than four blocked segments (a rim that runs back and forth across itself), leaves them out, as truck did before #1653, so the face meshes slightly off instead of not at all. Pinched faces (#1648) still split where they cross. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
STEP regressions
STEP files that once broke an import, kept so the import stays fixed. Each is written by SolidCraft from public commands; none comes from another program.
| File | Made by | What it holds |
|---|---|---|
rod_doubled_edge.step |
SolidCraft main (edf57cec), the commands of #4598: a Ø40 × 60 rod, a Ø8 cross bore cut 15 deep, the rod moved 100 mm, exported |
The bore's rim exported as a B-spline of 1 399 control points running back and forth across the bore: before #4598 a moved edge's tolerance grew with the move. The triangulator's assertion lost the body on import (#4031, #4598). |