The migration in #170 collapsed every run of blank lines in the 48 files it
touched, including inside verbatim copies of upstream code (e.g.
curve_curve_p3.cpp), so they no longer diffed cleanly against upstream.
Restore exactly those 91 blank lines; nothing else changes.
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
The SurfOfRevolution arm of set_out_of_bounds_enabled also flipped the generator's
flag; upstream SmTemporaryChangeValue only changes m_bOutOfBoundsEnabled. Adds a unit
test and a surface-of-revolution kind (pole-on-axis included) to the p3 fixtures and
shim; moves the SssIntersectEnfo doc block onto its impl.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>