SmPlane::GlobalSurfaceIntersect calls rCone.IntersectWithPlane on an SmCone&
for SmCone_TYPE / SmCylinder_TYPE: SmCone declares its own IntersectWithPlane
(conic sections), hiding SmSurfOfRevolution's. The Cone arm added in #313
ran the surface of revolution's on the cone's base. surface.plane_p2 gains
a real SmCone / SmCylinder operand for the GSI op (fixtures cone.json): 2
of the 10 new cases failed before the fix and 4 deferred; after it 9 pass
bit-identically, 1 defers (surface.surface_cache_p1).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
Guard common and handwritten entrypoints through native cleanup and callback restoration. Add exclusion, recursive forwarding and exception-unwind probes; p2 adds its concurrent cross-wrapper regression with the port.
Co-Authored-By: GPT-6.1-Sol <noreply@openai.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