exact-poly 0.3.0

Integer polygon geometry library — exact arithmetic, no float errors
Documentation
use wasm_bindgen::prelude::*;

use super::helpers::*;

#[wasm_bindgen]
pub fn point_strictly_inside_convex(px: i64, py: i64, ring_flat: &[i64]) -> Result<bool, JsValue> {
    let ring = parse_flat_ring(ring_flat)?;
    Ok(crate::spatial::point_strictly_inside_convex(px, py, &ring))
}

#[wasm_bindgen]
pub fn point_on_polygon_boundary(px: i64, py: i64, ring_flat: &[i64]) -> Result<bool, JsValue> {
    let ring = parse_flat_ring(ring_flat)?;
    Ok(crate::spatial::point_on_polygon_boundary(px, py, &ring))
}

#[wasm_bindgen]
pub fn point_inside_or_on_boundary(px: i64, py: i64, ring_flat: &[i64]) -> Result<bool, JsValue> {
    let ring = parse_flat_ring(ring_flat)?;
    Ok(crate::spatial::point_inside_or_on_boundary(px, py, &ring))
}

#[wasm_bindgen]
pub fn collinear_segments_overlap_area(
    a1x: i64,
    a1y: i64,
    a2x: i64,
    a2y: i64,
    b1x: i64,
    b1y: i64,
    b2x: i64,
    b2y: i64,
    a_flat: &[i64],
    b_flat: &[i64],
) -> Result<bool, JsValue> {
    let a_ring = parse_flat_ring(a_flat)?;
    let b_ring = parse_flat_ring(b_flat)?;
    Ok(crate::spatial::collinear_segments_overlap_area(
        a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y, &a_ring, &b_ring,
    ))
}

#[wasm_bindgen(skip_typescript)]
pub fn point_inside_any_part(parts_flat: JsValue, x: i64, y: i64) -> Result<bool, JsValue> {
    let parts = parse_flat_parts(parts_flat)?;
    Ok(crate::containment::point_inside_any_part(&parts, x, y))
}

#[wasm_bindgen(skip_typescript)]
pub fn contains_polygon(
    outer_parts_flat: JsValue,
    inner_parts_flat: JsValue,
) -> Result<bool, JsValue> {
    let outer_parts = parse_flat_parts(outer_parts_flat)?;
    let inner_parts = parse_flat_parts(inner_parts_flat)?;
    Ok(crate::containment::contains_polygon(
        &outer_parts,
        &inner_parts,
    ))
}