Ports smlib PR #27 (merge f64ff8b6) into core/offset.rs::draft: a picked face on a cylinder
(end radii equal, the #27 test) gets the cone `drafted_cone` gives, through the same
LocalOperation as a tilted plane. As in the capi, the outward normal at the face's internal
point (`outward_normal`: STEP inversion, NURBS uv, the surface normal turned with the outer
faceuse) says pin or hole (s = +1 or -1). The hinge circle is the axis on the neutral plane,
at the cylinder's height v0. The radius changes by -s tan(angle) per unit along the pull. The
pull must run along the axis (to 1e-9), and the axis must cross the neutral plane;
otherwise, or when the cone would close within the face, the draft is Error::Unsupported.
The capi's control-point edit and CopyAndAddAnalytics are solidcore's Cone::lean_cylinder
(solidcore#1545), with slope -s tan(angle) (z . pull) about height v0. A cone that is not a
cylinder (smlib#53's turned generators) stays Unsupported: lean_cylinder takes cylinders only.
draft_a_curved_face (R 5, h 10, 0.1 rad: V = pi h (R^2 + R r + r^2) / 3 = 638.3350153968712,
r = R - h tan 0.1) stays ignored on solidcore. lean_cylinder keeps the clone's cylinder flag.
Under the cylinder_rebuild_mean_radius fix SolidCraft runs with, rebuild_step_from_nurb_parameters
then refuses the leaned NURB (SM_ERR 1001). With that fix off, the port meets the closed form,
but the face is still flagged a cylinder ({cylinder: 1, plane: 2} vs C++'s {cone: 1, plane: 2}).
This is a solidcore bug, to be filed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXkZLQ6T7TSi4wswcmk