Skip to main content

ifc_alignment/
lib.rs

1//! `ifc-alignment` -- Linear referencing and alignment -- the IFC4x3 civil layer.
2//!
3//!
4//! IFC4x3 adds 14 alignment entities plus spiral curve types (`IfcClothoid`,
5//! `IfcCosineSpiral`). Isolated in its own crate because building-only
6//! consumers should never compile clothoid integration.
7//!
8//! # Module map
9//!
10//! | Module | Role |
11//! |---|---|
12//! | `alignment` | `IfcAlignment` and its horizontal/vertical/cant parts |
13//! | `horizontal` | Horizontal segments: line, arc, spiral transitions |
14//! | `vertical` | Vertical segments: grades and parabolic curves |
15//! | `cant` | Superelevation (`IfcAlignmentCant`) for rail |
16//! | `referent` | `IfcReferent` stationing and chainage |
17//! | `placement` | `IfcLinearPlacement` and distance expressions |
18//! | `error` | Why an alignment operation failed |
19//!
20//! Horizontal line and circular-arc parameter resolution lowers to exact
21//! neutral curve graphs. Transition curves remain typed unsupported until the
22//! neutral curve vocabulary can preserve them without approximation.
23
24mod alignment;
25pub mod authoring;
26mod cant;
27mod curve;
28mod error;
29mod horizontal;
30mod placement;
31mod referent;
32pub(crate) mod slot;
33mod vertical;
34mod view;
35
36pub use authoring::{
37    alignment, alignment_segment, axis2_placement_linear, cant_layout, cant_segment,
38    cartesian_point, horizontal_layout, horizontal_segment, linear_element, linear_placement,
39    linear_positioning_element, point_by_distance, referent, stationing, vertical_layout,
40    vertical_segment, CantSegmentDraft, HorizontalSegmentDraft, VerticalSegmentDraft,
41};
42pub use cant::{
43    cant_at, read_cant_segment, CantAtStation, CantLayout, CantSegment, CantSegmentType,
44};
45pub use curve::{
46    elevation_law, gradient_curve3, lower_gradient_curve, lower_horizontal_layout,
47    lower_horizontal_layout_partial, lower_horizontal_segment, lower_vertical_segment, profile_law,
48    LoweredAlignmentCurve, PartialHorizontalLayout, RefusedSegment,
49};
50pub use error::{AlignmentError, AlignmentResult};
51pub use horizontal::{
52    read_horizontal_segment, AlignmentUnits, HorizontalSegment, HorizontalSegmentType,
53};
54pub use placement::{
55    resolve_linear_placement, resolve_point_by_distance, CurveMeasure, LinearPlacement,
56    PointByDistance,
57};
58pub use referent::{station_equations, StationEquation};
59pub use vertical::{read_vertical_segment, VerticalSegment, VerticalSegmentType};
60pub use view::AlignmentView;