Found while working on #246. Triangulating a profile with two holes side by side in the same horizontal band gives an open mesh with 8 boundary edges. Example: a 4×4 outer contour with 1×1 holes at x∈[−1.5,−0.5] and x∈[0.5,1.5], both at y∈[−0.5,0.5]. A plain `Extrusion` of that profile fails its volume and closure checks, so the mesh path produces a non-watertight solid. Holes placed diagonally don't trigger it, which suggests the hole-bridging step connects both holes along the same horizontal ray, or that a bridge crosses the other hole.
Done when
Profiles with several holes compile to closed, consistently wound meshes with exact area and volume. Cover side by side, stacked, aligned on one ray, touching the ray at a vertex, and holes near the outer boundary, with a property test over random hole layouts. Refuse by name only invalid input, such as overlapping holes or a hole outside the outer contour.
Found while working on #246. Triangulating a profile with two holes side by side in the same horizontal band gives an open mesh with 8 boundary edges. Example: a 4×4 outer contour with 1×1 holes at x∈[−1.5,−0.5] and x∈[0.5,1.5], both at y∈[−0.5,0.5]. A plain `Extrusion` of that profile fails its volume and closure checks, so the mesh path produces a non-watertight solid. Holes placed diagonally don't trigger it, which suggests the hole-bridging step connects both holes along the same horizontal ray, or that a bridge crosses the other hole.
Done when
Profiles with several holes compile to closed, consistently wound meshes with exact area and volume. Cover side by side, stacked, aligned on one ray, touching the ray at a vertex, and holes near the outer boundary, with a property test over random hole layouts. Refuse by name only invalid input, such as overlapping holes or a hole outside the outer contour.