Expand description
Exact revolution for the profile families exact extrusion already covers.
§What is exactly representable
Revolving a rectangle a full turn about an axis it does not cross produces an annular tube: two cylinders (inner and outer radius) capped by two annular planes. Every one of those is an elementary surface the kernel already carries, so the result is exact – no tessellation, no sampled approximation.
§Partial turns
A PARTIAL turn is not this shape. It has two extra planar walls at the
start and end angles, its walls are bounded by circular arcs rather than
closed by seams, and nothing closes round the axis. That different
topology lives in crate::revolve_partial (#172); every profile that
revolves a full turn through the contour path also revolves partially,
and a partial turn may additionally touch the axis along straight
segments or at vertices.
§What is refused, and why that is the honest answer
A turn beyond a full turn sweeps through itself and is refused by name; a zero or non-finite angle is invalid input.
A FULL turn of a profile crossing the axis sweeps through itself and is refused, as is a partial turn crossing it.
A FULL turn of a profile touching the axis (#379) is exact when each
vertex on the axis ends an edge lying on the axis, which sweeps no face,
and its other edge is another such edge, a straight edge ending on the
axis exactly perpendicularly, which sweeps a disc cap, or any other
straight edge, which sweeps a cone up to its apex, or an arc ending on
the axis with its circle centred on it, which sweeps a sphere up to its
pole: a solid cylinder, a stepped shaft, a cone, a bolt, a spinning top, a
ball, a domed column. The contact is classified with the exact
side_of_axis sign, no tolerance; whether an arc’s circle is centred on
the axis is decided within the rounding of its coordinates (the arc is a
bulge, which cannot encode a sphere’s meridian exactly). The apex or pole
is a vertex of the B-rep, not a degenerate edge (ADR 0059). A vertex on
the axis with no edge along it (a pinch point), an arc whose circle is not
centred on the axis (a spindle or horn torus, a lemon or an apple), an arc
with both ends on the axis and an arc running across it are refused by
name, as is a straight edge ending on the axis within the tolerance of
perpendicular to it but not exactly.
§The axis (#450)
An axis exactly along +y or -y builds in place. Any other axis lying
exactly in the profile plane (z zero in its direction and origin) is
built exactly as given: the section is mapped rigidly into the axis’s own
frame, revolved about +y there and placed back with
ExactBRep::transformed, so a tilt of a milliradian is a tilt of a
milliradian, never snapped onto +y. A direction with a z component, or
an origin off the plane, sweeps hyperboloids and is refused by name: there
is no tolerance band to offer. Rejected: snapping the axis within the
tolerance and reporting it (a tilt of 1.4 mrad over 10 m moves geometry by
14 mm, and construct has no reading channel).
The mesh path in revolve.rs handles all of these. Refusing here means a
caller asking for exactness gets a typed refusal naming the gap instead of
a silently tessellated substitute.
Functions§
- fixed_
reference_ sweep_ exact - Sweep a supported profile along a straight path with a fixed reference.
- revolve_
profile_ exact - Revolve a supported profile into an exact, closed analytic B-rep.