Skip to main content

is_valid_ring

Function is_valid_ring 

Source
pub fn is_valid_ring<R, P>(ring: &R) -> Result<(), ValidityFailure>
Expand description

Validate a single ring.

Checks point count, closure, coordinate finiteness, that no two non-adjacent edges intersect, that no vertex triple is a spike, and that the ring is wound in its declared order. Returns Ok(()) for a valid ring.

Mirrors the ring arm of boost::geometry::is_valid (algorithms/is_valid.hpp, via detail/is_valid/ring.hpp).

§Errors

Returns a ValidityFailure describing the first rule the ring violates, including ValidityFailure::Spikes and ValidityFailure::WrongOrientation.

§Examples

use geometry_cs::Cartesian;
use geometry_model::{Point2D, Ring};
use geometry_overlay::validity::is_valid_ring;

type P = Point2D<f64, Cartesian>;
let square: Ring<P> = Ring::from_vec(vec![
    P::new(0.0, 0.0), P::new(0.0, 1.0), P::new(1.0, 1.0), P::new(1.0, 0.0), P::new(0.0, 0.0),
]);
assert!(is_valid_ring(&square).is_ok());