ADR 0007 — A C-section is an OPEN ANNULUS, not a single closed loop
Status: accepted (2026-08-21) · Phase 2
Context
The original design sketch described the split tube as returning “ONE closed C-shaped loop —
the outer arc from 30 to 330, then the inner arc back from 330 to 30 — with
inner=undef”. docs/usage/profiles.md then predicted the consequence: a C-section is
not star-shaped about its centroid, so ut_rod’s centroid-fan end cap would
produce faces crossing the void, and the section would need “its own cap
strategy” — realistically a general polygon triangulator, the one piece of work
ADR 0001 deliberately deferred.
Decision
Keep the split section as two loops, outer and inner, exactly like a closed
tube — but mark the profile open in its meta. The emitter then:
- runs the outer and inner skins over
i = 0 .. N-2instead of wrapping, - runs the end caps as ring strips over the same range,
- and adds two seam walls, the cut faces that close the split along the whole
run: a quad strip at
i = 0and another ati = N-1.
That is one extra term in _ut_faces_hollow and one conditional index bound.
Consequences
No triangulator is needed, and none of the deferred work came due. The
prediction in docs/usage/profiles.md was pessimistic because it accepted the plan’s
single-loop framing; changing the representation dissolved the problem rather
than solving it.
PROF-2 correspondence is preserved for free — both loops are sampled at the
same angles across the material span, exactly as in the closed case.
The seam walls are not optional. Without them the surface is not closed and CGAL rejects the mesh outright, which is at least a loud failure rather than a plausible-looking wrong solid.
A split run still has no enclosed lumen, so ut_bore_rgn() and
ut_shell_rgn() both return empty and the run cannot participate in a junction.
That limit is unchanged and is what C-sections are for: conduit, cable channel,
and parts that print open-side-up without bridging.
ut_rod’s centroid fan remains, and remains restricted to sections that are
star-shaped about their centroid. A genuinely non-star-shaped closed profile
would still need a triangulator — but no shipped constructor produces one.