- runner: build the SmCone operand with Cone::create_canonical (bSwapUV,
bInsideOut FALSE) and call intersect_with_cone; drop the stale hard-coded
Unported(SmCone::CreateCanonical, surface.cone_p1) deferral (cone_p1 green)
- generator: cone operand 4/15 intersections (was 1/12), 70% coaxial with
the surface; cone cases 18 -> 72 (17 with intersection curves)
- shims: stale comments claiming now-ported units unported (volume_p1,
crv_in_volume, topology_intersector_p1, face_p1); no behaviour change
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
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