Skip to main content

Crate ogeom_intersect

Crate ogeom_intersect 

Source
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 one ogeom-bool builds 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.