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 spiral curve laws.
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 lines, circular arcs and transition spirals lower to exact
21//! neutral curve graphs; a spiral is stored as its curvature law
22//! (`Curve2::Intrinsic`), never integrated here. Families without an exact
23//! law are typed refusals, tracked in GitHub issues.
24
25mod alignment;
26pub mod authoring;
27mod cant;
28mod curve;
29mod error;
30mod horizontal;
31mod placement;
32mod referent;
33pub(crate) mod slot;
34mod vertical;
35mod view;
36
37pub use authoring::{
38    alignment, alignment_segment, axis2_placement_linear, cant_layout, cant_segment,
39    cartesian_point, horizontal_layout, horizontal_segment, linear_element, linear_placement,
40    linear_positioning_element, point_by_distance, referent, stationing, vertical_layout,
41    vertical_segment, CantSegmentDraft, HorizontalSegmentDraft, VerticalSegmentDraft,
42};
43pub use cant::{
44    cant_at, read_cant_segment, CantAtStation, CantLayout, CantSegment, CantSegmentType,
45};
46pub use curve::{
47    elevation_law, gradient_curve3, lower_gradient_curve, lower_horizontal_layout,
48    lower_horizontal_layout_partial, lower_horizontal_segment, lower_vertical_segment, profile_law,
49    LoweredAlignmentCurve, PartialHorizontalLayout, RefusedSegment,
50};
51pub use error::{AlignmentError, AlignmentResult, ProfileSeam};
52pub use horizontal::{
53    read_horizontal_segment, AlignmentUnits, HorizontalSegment, HorizontalSegmentType,
54};
55pub use placement::{
56    resolve_linear_placement, resolve_point_by_distance, CurveMeasure, LinearPlacement,
57    PointByDistance,
58};
59pub use referent::{station_equations, StationEquation};
60pub use vertical::{read_vertical_segment, VerticalSegment, VerticalSegmentType};
61pub use view::AlignmentView;