Skip to main content

axiolid_evaluate/
lib.rs

1#![forbid(unsafe_code)]
2
3//! Analytic and spline curve/surface evaluation (ADR 0012, ADR 0036).
4//!
5//! This is the scalar evaluation oracle for parametric geometry: native-domain
6//! evaluation, derivatives, jets, adaptive flattening, and elementary surface
7//! inversion. It is deliberately separate from the `axiolid-reference`
8//! umbrella so a parametric consumer (NURBS, CAD) acquires evaluation without
9//! the umbrella's mesh, spatial, and measure dependencies.
10//!
11//! No intrinsics, no threading, no feature gates: it must stay obviously
12//! correct in preference to being fast.
13//!
14//! `axiolid-reference` re-exports [`curve`] and [`surface`] unchanged, so
15//! `axiolid_reference::curve::*` paths are part of this package's public
16//! surface too: renaming or reshaping an item here breaks those callers.
17
18pub mod arc_length;
19pub mod arc_parameter;
20pub mod banked;
21pub mod bound;
22pub mod chain;
23pub mod curve;
24pub mod elevation;
25pub mod frenet;
26pub mod intrinsic_relation;
27mod nurbs;
28pub mod polyline_length;
29pub mod provider;
30pub mod station;
31pub mod surface;
32
33pub use arc_length::{elevated_point, elevated_tangent, intrinsic_point, intrinsic_tangent};
34pub use arc_parameter::{
35    arc_length2, arc_length3, parameter_at_arc_length2, parameter_at_arc_length3,
36    ARC_LENGTH_TOLERANCE,
37};
38pub use banked::{banked_derivative, banked_point, banked_section, banked_tangent, BankedSection};
39pub use chain::{chain_point, chain_tangent};
40pub use curve::{derivative2, derivative3, evaluate2, evaluate3, flatten2, ScalarCurve};
41pub use elevation::{elevation_chord_bound, elevation_grade, elevation_height};
42pub use frenet::{frenet_frame, frenet_point, frenet_tangent};
43pub use intrinsic_relation::{join_intrinsic3, offset_intrinsic3, trim_intrinsic3};
44pub use provider::ReferenceCurveEvaluator;
45pub use station::{
46    station_length2, station_length3, station_section2, station_section3, SectionFrame,
47};
48pub use surface::{partials, Patch, ScalarSurface};