Expand description
Intersection: where curves and surfaces meet.
Elsewhere: IntPatch, GeomInt, IntAna, IntCurve, IntCurveSurface,
IntWalk, IntSurf, ApproxInt and Extrema.
The entry points, by what is being intersected:
intersect_surfaces: surface/surface, the oneogeom-boolbuilds on. Analytic closed forms where they exist, with exact same-parameter pcurves; the marching-and-fitting pipeline where they do not, with the tolerance reported as a sum of stated parts.intersect_curves_2d/intersect_curves: curve/curve in the plane and in space. The planar one is what boolean face splitting runs on; the spatial one reports the gap each crossing achieved, because space curves generically miss.intersect_curve_surface: curve/surface, the well-posed system, and what the exact point-in-solid classifier will cast its rays with.
The stages underneath are public because each is separately measurable:
surface_surface (the closed forms), seeds/trace/branches
(the marcher), approximate_branch (polyline to curves).
§The instruments
This crate was the project’s single largest risk (no Rust equivalent
existed, and it is where prior open-source B-rep efforts failed), so it is
held to instruments rather than trusted. They live in tests/support/,
because measuring an intersector is not something a caller of one wants to
do; what a caller wants is an intersector that has been measured.
One scores accuracy: every point of every reported curve against both
surfaces, with ground truth being the surfaces themselves rather than
anyone else’s answer. The other scores completeness: the surfaces are
asked, by signed distance and the intermediate value theorem, where the
intersection must be, and every such cell had better be reached by some
branch. The second exists because the first cannot catch a missing answer:
an intersector that finds one circle of two and traces it perfectly scores
perfectly on accuracy alone. Both have negative controls in
tests/instruments.rs; they demonstrably fail when something is genuinely
missing.
What this still lacks is an input no one here generated: a published corpus. Until that lands, the numbers say the machinery is sound on what it has seen, and they say nothing more than that.
Re-exports§
pub use approx::IntersectionCurve;pub use approx::approximate_branch;pub use curve_surface::CurveSurfaceIntersection;pub use curve_surface::CurveSurfaceOptions;pub use curve_surface::Piercing;pub use curve_surface::intersect_curve_surface;pub use curves::Crossing;pub use curves::CurveCurveOptions;pub use curves::CurveIntersection;pub use curves::Overlap;pub use curves::intersect_curves;pub use curves::intersect_curves_2d;pub use extrema::Approach;pub use extrema::Extrema;pub use extrema::ExtremaOptions;pub use extrema::extrema_curve_curve;pub use extrema::extrema_curve_surface;pub use extrema::extrema_surface_surface;pub use march::Contact;pub use march::Marching;pub use march::Stopped;pub use march::Traced;pub use march::branches;pub use march::seeds;pub use march::trace;pub use march::trace_tangential;pub use section::IntersectOptions;pub use section::SectionCurve;pub use section::SurfaceIntersection;pub use section::exact_pcurve_of;pub use section::exact_pcurve_over;pub use section::intersect_surfaces;pub use surface::Meeting;pub use surface::surface_surface;pub use walk::Condition;pub use walk::Walked;pub use walk::follow;pub use walk::walk_one_way;
Modules§
- approx
- The approximation stage: a traced branch becomes curves.
- curve_
surface - Where a curve pierces a surface.
- curves
- Where two curves meet, in the plane and in space.
- extrema
- The stationary approaches between two geometries.
- march
- The general surface/surface intersector: seed, then walk.
- section
- Where two surfaces meet: the one call.
- surface
- Surface/surface intersection: the analytic cases.
- walk
- One walker, several conditions.