rcgal 0.2.2

Rust Computational Geometry Algorithms Library.
Documentation
use crate::{
    kernel::polygon_2::Polygon2 as KernelPolygon2,
    wasm::kernel::{line_segment_2::LineSegment2, point_2::Point2},
};
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub struct Polygon2 {
    #[wasm_bindgen(skip)]
    pub kernel_polygon_2: KernelPolygon2<f64>,
}

#[wasm_bindgen]
impl Polygon2 {
    #[wasm_bindgen(constructor)]
    pub fn new(points: Vec<Point2>) -> Self {
        Self {
            kernel_polygon_2: KernelPolygon2::new(
                points.iter().map(|point| point.kernel_point_2).collect(),
            ),
        }
    }

    pub fn vertices(&self) -> Vec<Point2> {
        self.kernel_polygon_2
            .vertices()
            .iter()
            .map(|point| Point2 {
                kernel_point_2: point.clone(),
            })
            .collect()
    }

    pub fn edges(&self) -> Vec<LineSegment2> {
        self.kernel_polygon_2
            .edges()
            .iter()
            .map(|segment| LineSegment2 {
                kernel_line_segment_2: segment.clone(),
            })
            .collect()
    }

    pub fn area(&self) -> f64 {
        self.kernel_polygon_2.area()
    }

    pub fn is_simple(&self) -> bool {
        self.kernel_polygon_2.is_simple()
    }

    pub fn is_convex(&self) -> bool {
        self.kernel_polygon_2.is_convex()
    }
}