i_overlay 7.0.2

Boolean Operations for 2D Polygons: Supports intersection, union, difference, xor, and self-intersections for all polygon varieties.
Documentation
use crate::geom::x_segment::XSegment;
use i_float::int::number::int::IntNumber;
use i_float::int::rect::IntRect;

#[derive(Clone)]
pub(super) struct Fragment<I: IntNumber> {
    pub(super) index: usize,
    pub(super) rect: IntRect<I>,
    pub(super) x_segment: XSegment<I>,
}

impl<I: IntNumber> Fragment<I> {
    #[inline]
    pub(super) fn with_index_and_segment(index: usize, x_segment: XSegment<I>) -> Self {
        let (min_y, max_y) = if x_segment.a.y < x_segment.b.y {
            (x_segment.a.y, x_segment.b.y)
        } else {
            (x_segment.b.y, x_segment.a.y)
        };

        let rect = IntRect {
            min_x: x_segment.a.x,
            max_x: x_segment.b.x,
            min_y,
            max_y,
        };

        Self {
            index,
            rect,
            x_segment,
        }
    }
}