pub fn make_sphere_surface_framed(
center: Vec3,
radius: f64,
polar_axis: Vec3,
seam_direction: Option<Vec3>,
) -> Result<NurbsSurface, String>Expand description
A sphere with BOTH halves of its frame chosen: the polar axis (where the two
degenerate poles sit) and the SEAM direction (where the u = 0 meridian
runs). seam_direction is Gram-Schmidt’d against the axis; None — and a
seam parallel to the axis, which names no meridian — falls back to
Vec3::perpendicular, i.e. exactly what make_sphere_surface builds.
A caller that KNOWS where the sphere will be trimmed uses this to park the
poles and the seam inside the region the trim removes, so the surviving face
carries neither. feature_pipeline::features::tube does that for its joint
balls: a seam that survives into the result is an edge bordering ONE face,
which is a real edge in the topology and a visible line on the model.