SmSphere and SmTorus inherit SmSurfOfRevolution::TrimWithDomain; its
virtual ConvertUVFromNURBSToSTEP (UpdateAnalyticalDomain) and
CreateIsoParametricCurve (MakeNurb, Reparameterize, RebuildPolarConverter)
now reach the sphere/torus overrides through trim_with_domain_using, and
SurfaceKind::Sphere/Torus dispatch to it instead of a dispatch gap.
surface.sphere and surface.torus difftest a TrimDomain op.
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>
Add the surface.sphere difftest runner (800 generated cases, 0 deferred,
--perturb 800/800), C++ shim and FFI binding. Wire Sphere::read_from_db into
Surface::read_from_db and the ssi engine deferral, clamp the sqrt in
circle_radius, and point read_from_db_unported_types at the still-unported
offset surface type. plan/modules.toml: surface.sphere green.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>