Skip to main content

axiolid_nurbs/
lib.rs

1#![forbid(unsafe_code)]
2#![warn(missing_docs)]
3
4//! General NURBS algorithms over Axiolid's format-neutral B-spline values.
5//!
6//! This crate builds on the portable scalar oracle: evaluation comes from
7//! `axiolid-evaluate` and is not reimplemented here. It owns differential
8//! geometry and exact shape-preserving transformations; importers and
9//! tessellators are consumers, not the capability boundary.
10//!
11//! Every tolerance-sensitive solver takes explicit, bounded options (work
12//! ceilings, resolutions, tolerances) and reports an unresolved outcome or
13//! refuses when they run out. A shape-preserving transform is tested against
14//! independent evaluation samples of the original, not its own recurrence.
15
16mod approximate;
17mod axis;
18mod certified_bezier;
19mod certified_curve_distance;
20mod certified_curve_intersection;
21mod certified_curve_projection;
22mod certified_curve_surface_intersection;
23mod certified_projection;
24mod certified_refinement;
25mod certified_surface_arcs;
26mod certified_surface_bezier;
27mod certified_surface_inversion;
28mod certified_surface_projection;
29mod certified_surface_surface_intersection;
30mod curve_analysis;
31mod curve_projection;
32mod curve_tower;
33mod degree;
34mod exact_curve_intersection;
35mod exact_field;
36mod exact_series;
37mod exact_surface_intersection;
38pub mod extrema;
39mod field;
40mod fit;
41mod implicit_ops;
42mod implicit_section;
43mod implicit_trace;
44mod intersection_curve;
45mod interval;
46mod pair_certify;
47mod pair_trace;
48mod periodic;
49mod periodic_surface;
50mod projection;
51mod revolution_profile;
52mod root_chain;
53mod ruled_section;
54mod section_curves;
55mod spline_field;
56mod surface_analysis;
57mod surface_ops;
58mod surface_projection;
59mod surface_transform;
60mod torus_section;
61mod transform;
62
63pub use approximate::{
64    fit_curve3, fit_curve3_to_tolerance, fit_surface_grid, CurveFit3, CurveFitOptions,
65    CurveFitTolerance, Parameterisation, SurfaceFit, SurfaceFitOptions,
66};
67pub use certified_curve_distance::{distance_curve2_certified, distance_curve3_certified};
68pub use certified_curve_intersection::{
69    intersect_curve2_certified, CertifiedCurveIntersection2, CertifiedCurveIntersectionOptions,
70    ClassifiedCurveContact2, CurveIntersectionDegeneracy, TransverseCurveIntersection2,
71};
72pub use certified_curve_projection::{project_curve2_certified, project_curve3_certified};
73pub use certified_curve_surface_intersection::{
74    intersect_curve_surface_certified, CertifiedCurveSurfaceIntersection3,
75    CertifiedCurveSurfaceIntersectionOptions, CurveSurfaceParameterBox,
76    TransverseCurveSurfaceIntersection3,
77};
78pub use certified_projection::{
79    CertifiedProjectionOptions, CertifiedSurfaceProjection3, CertifiedSurfaceProjectionOptions,
80    CurveDistanceCertificate2, CurveDistanceCertificate3, CurvePairParameterBox,
81    CurveProjectionCertificate2, CurveProjectionCertificate3, ParameterInterval,
82    SurfaceParameterBox, SurfaceProjectionCertificate3, SurfaceProjectionUnresolvedReason,
83    MAX_CERTIFIED_SURFACE_PROJECTION_DEPTH, MAX_CERTIFIED_SURFACE_PROJECTION_WORK,
84};
85pub use certified_surface_arcs::{
86    audit_coverage, certify_surface_arcs, CertifiedRegion, CertifiedSurfaceArcs3,
87    CertifiedSurfaceArcsOptions, CoverageFault, RegionKind, MAX_AUDIT_DEPTH,
88};
89pub use certified_surface_inversion::{
90    invert_periodic_surface_certified, invert_surface_certified, SurfaceInversionCertificate3,
91    SurfaceInversionRefusal,
92};
93pub use certified_surface_projection::{
94    project_periodic_surface_certified, project_surface_certified,
95};
96pub use certified_surface_surface_intersection::{
97    intersect_surface_surface_certified, CertifiedSurfaceSurfaceIntersection3,
98    CertifiedSurfaceSurfaceIntersectionOptions, SurfaceSurfaceParameterBox,
99    SurfaceSurfaceTraceEndpoint3, TransverseSurfaceSurfaceTrace3,
100};
101pub use curve_analysis::{analyze_curve2, analyze_curve3, CurveDifferential2, CurveDifferential3};
102pub use curve_projection::{project_curve2, project_curve3};
103pub use degree::{
104    elevate_degree2, elevate_degree3, reduce_degree2, reduce_degree3, remove_knot2, remove_knot3,
105    BoundedResult,
106};
107pub use exact_curve_intersection::{
108    exact_curve_curve_intersection2, exact_curve_curve_intersection3,
109    exact_curve_surface_intersection, ExactCurveHit, ExactCurveIntersection, ExactCurveParameter,
110    ExactCurveRefusal, Isolated,
111};
112pub use exact_surface_intersection::{
113    exact_surface_intersection, Derivation, ExactIntersectionCurve, ExactIntersectionRefusal,
114};
115pub use fit::{interpolate_curve3, loft_surface};
116pub use implicit_ops::{
117    extract_stretch, implicit_view, section_curve_surface_intersection, trace_section_pcurves,
118};
119pub use implicit_section::{implicit_surface_intersection, section_field_of};
120pub use intersection_curve::{
121    construct_curve_surface_points, construct_surface_surface_curves,
122    ConstructedCurveSurfacePoint3, ConstructedIntersectionCurve3, IntersectionCurveRefusal,
123};
124pub use pair_trace::spline_pair_intersection;
125pub use periodic::{
126    curve2_seam_continuity, curve3_seam_continuity, wrap_curve2_parameter, wrap_curve3_parameter,
127    PeriodicCurve2, PeriodicCurve3, SeamContinuity,
128};
129pub use periodic_surface::PeriodicBSplineSurface;
130pub use projection::{
131    CurveProjection2, CurveProjection3, ProjectionOptions, ProjectionStatus, SurfaceProjection,
132};
133pub use section_curves::{
134    section_curve_curve_intersection2, section_curve_curve_intersection3, CurveCurveHit,
135};
136pub use surface_analysis::{analyze_surface, FundamentalForm, SurfaceDifferential};
137pub use surface_ops::{
138    elevate_surface_degree_u, elevate_surface_degree_v, iso_curve_at_u, iso_curve_at_v,
139    reduce_surface_degree_u, reduce_surface_degree_v, remove_surface_knot_u, remove_surface_knot_v,
140    BoundedSurface, SurfaceKnotRemoval,
141};
142pub use surface_projection::project_surface;
143pub use surface_transform::{
144    insert_surface_knot_u, insert_surface_knot_v, reverse_surface_u, reverse_surface_v,
145};
146pub use transform::{
147    bezier_segments2, bezier_segments3, insert_knot2, insert_knot3, reverse2, reverse3, split2,
148    split3,
149};