rcgal 0.2.2

Rust Computational Geometry Algorithms Library.
Documentation
use crate::{
    kernel::{triangle_2::Triangle2 as KernelTriangle2, util_enum::Orientation},
    wasm::kernel::{line_segment_2::LineSegment2, point_2::Point2},
};
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub struct Triangle2 {
    #[wasm_bindgen(skip)]
    pub kernel_triangle_2: KernelTriangle2<f64>,
}

#[wasm_bindgen]
impl Triangle2 {
    #[wasm_bindgen(constructor)]
    pub fn new(a: Point2, b: Point2, c: Point2) -> Triangle2 {
        Triangle2 {
            kernel_triangle_2: KernelTriangle2::new(
                a.kernel_point_2,
                b.kernel_point_2,
                c.kernel_point_2,
            ),
        }
    }

    pub fn a(&self) -> Point2 {
        Point2 {
            kernel_point_2: self.kernel_triangle_2.a(),
        }
    }

    pub fn b(&self) -> Point2 {
        Point2 {
            kernel_point_2: self.kernel_triangle_2.b(),
        }
    }

    pub fn c(&self) -> Point2 {
        Point2 {
            kernel_point_2: self.kernel_triangle_2.c(),
        }
    }

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

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

    pub fn orientation(&self) -> Orientation {
        self.kernel_triangle_2.orientation()
    }

    pub fn reverse_orientation(&mut self) {
        self.kernel_triangle_2.reverse_orientation();
    }

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