Skip to main content

exact_poly/wasm/
spatial.rs

1use wasm_bindgen::prelude::*;
2
3use super::helpers::*;
4
5#[wasm_bindgen]
6pub fn point_strictly_inside_convex(px: i64, py: i64, ring_flat: &[i64]) -> Result<bool, JsValue> {
7    let ring = parse_flat_ring(ring_flat)?;
8    Ok(crate::spatial::point_strictly_inside_convex(px, py, &ring))
9}
10
11#[wasm_bindgen]
12pub fn point_on_polygon_boundary(px: i64, py: i64, ring_flat: &[i64]) -> Result<bool, JsValue> {
13    let ring = parse_flat_ring(ring_flat)?;
14    Ok(crate::spatial::point_on_polygon_boundary(px, py, &ring))
15}
16
17#[wasm_bindgen]
18pub fn point_inside_or_on_boundary(px: i64, py: i64, ring_flat: &[i64]) -> Result<bool, JsValue> {
19    let ring = parse_flat_ring(ring_flat)?;
20    Ok(crate::spatial::point_inside_or_on_boundary(px, py, &ring))
21}
22
23#[wasm_bindgen]
24pub fn collinear_segments_overlap_area(
25    a1x: i64,
26    a1y: i64,
27    a2x: i64,
28    a2y: i64,
29    b1x: i64,
30    b1y: i64,
31    b2x: i64,
32    b2y: i64,
33    a_flat: &[i64],
34    b_flat: &[i64],
35) -> Result<bool, JsValue> {
36    let a_ring = parse_flat_ring(a_flat)?;
37    let b_ring = parse_flat_ring(b_flat)?;
38    Ok(crate::spatial::collinear_segments_overlap_area(
39        a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y, &a_ring, &b_ring,
40    ))
41}
42
43#[wasm_bindgen(skip_typescript)]
44pub fn point_inside_any_part(parts_flat: JsValue, x: i64, y: i64) -> Result<bool, JsValue> {
45    let parts = parse_flat_parts(parts_flat)?;
46    Ok(crate::containment::point_inside_any_part(&parts, x, y))
47}
48
49#[wasm_bindgen(skip_typescript)]
50pub fn contains_polygon(
51    outer_parts_flat: JsValue,
52    inner_parts_flat: JsValue,
53) -> Result<bool, JsValue> {
54    let outer_parts = parse_flat_parts(outer_parts_flat)?;
55    let inner_parts = parse_flat_parts(inner_parts_flat)?;
56    Ok(crate::containment::contains_polygon(
57        &outer_parts,
58        &inner_parts,
59    ))
60}