Skip to main content

axiolid_reference/
lib.rs

1#![forbid(unsafe_code)]
2
3//! Portable scalar reference implementation: the correctness oracle (ADR 0012).
4//!
5//! No intrinsics, no threading, no feature gates. Every optimized backend is
6//! validated by differential test against this crate, so it must stay readable
7//! and obviously correct in preference to being fast.
8//!
9//! This package is a **convenience umbrella** (ADR 0036). Certified predicates
10//! now live in the focused `axiolid-predicates` package and are re-exported
11//! here unchanged, so an existing `axiolid_reference::orient2d` caller is
12//! unaffected while a narrow consumer can depend on the substrate directly
13//! instead of acquiring this package's whole dependency graph.
14
15pub mod assemble;
16pub mod boolean;
17pub mod clash;
18pub mod convex_hull;
19pub mod coplanar;
20pub mod intersection;
21pub mod polygon;
22pub mod primitive;
23pub mod retriangulate;
24pub mod section;
25pub mod segment_triangle;
26pub mod tessellate;
27pub mod triangle_triangle;
28
29/// Analytic and spline evaluation moved to the focused `axiolid-evaluate`
30/// package (ADR 0036). Re-exported unchanged so existing
31/// `axiolid_reference::curve::*` and `::surface::*` callers are unaffected.
32pub use axiolid_evaluate::{curve, surface};
33
34pub use axiolid_predicates::{
35    arithmetic, expansion, orient3, orientation, scene, sphere, static_filter,
36};
37
38pub use assemble::exact_boolean;
39pub use axiolid_evaluate::{
40    derivative2, derivative3, evaluate2, evaluate3, flatten2, partials, Patch, ScalarCurve,
41    ScalarSurface,
42};
43// Arc-length evaluation of natural-equation curves (ADR 0061, ADR 0062).
44// Re-exported on the same footing as the rest of `axiolid-evaluate`, so a
45// consumer of the umbrella reaches a torsion curve without taking the
46// parametric package as a direct dependency.
47pub use axiolid_evaluate::{
48    elevated_point, elevated_tangent, frenet_frame, frenet_point, frenet_tangent, intrinsic_point,
49    intrinsic_tangent, join_intrinsic3, offset_intrinsic3, trim_intrinsic3,
50};
51pub use axiolid_predicates::{
52    incircle, incircle_filter, insphere, insphere_filter, orient2d, orient2d_filter, orient3d,
53    orient3d_filter, two_diff, two_product, two_sum, StaticFilter,
54};
55pub use boolean::ScalarBoolean;
56pub use convex_hull::{minimum_area_rectangle, strict_convex_hull, OrientedRectangle2};
57pub use intersection::{
58    assemble_polylines, intersection_segments, EdgeKey, IntersectionCurve, IntersectionSegment,
59    NodeKey, Operand, Polyline,
60};
61pub use polygon::{ring_orientation, signed_area2, triangulate_simple};
62pub use retriangulate::{retriangulate_face, FacePatch};
63pub use section::ScalarSection;
64pub use segment_triangle::{segment_triangle_relation, SegmentTriangleRelation};
65pub use triangle_triangle::{triangle_triangle_relation, TriangleTriangleRelation};