Skip to main content

Module revolve_exact

Module revolve_exact 

Source
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.