Adds the three helpers to sc_sm.h, copied from the per-shim copies they
replace, and switches 19 shims to the shared flg/put_mat/put_vec/put_ivl/st/
put_dom. Shims touched by open PRs are left alone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
125 shims carried private copies of the same small helpers (put_vec, st,
nl_status, Rd, dump_crv, read_nurb, ...). Move the most common, byte-identical
form of each into three headers grouped by the upstream API they need, and have
those shims pull them in with `using sc::<name>;`. Shims with a different
variant keep their own copy; files touched by open PRs are left alone.
`the_context()` stays per shim (its function-local SmContext must not be shared).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBLgPenT24P1dunqnZR1Dj
SmBendVolume as VolumeKind::Bend(BendVolume), dispatched from surface::volume::p1:
construction and repair, Evaluate/EvaluateSimple, the analytic bounding boxes, trim,
the exact inverse and point solves, domain predicates, copy, equality, ReadFromDB.
difftest: 2344 cases (844 fixtures + 1500 generated), 2281 bit-identical, 0 failed,
63 deferred (curve.curve_p9 62: IsOnPositiveSideOfPlanes; surface.volume_p2 1:
base ReadFromDB). 30k-seed run clean; --perturb SENSITIVE.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>