1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use super::*;
use std::marker::PhantomData;
mod convert;
mod regular;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct RegularPolygon<T> {
pub sides: usize,
pub center: Point<T>,
pub radius: T,
pub rotate: T,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct CirclePoints<T> {
ty: PhantomData<T>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Polyline<T> {
pub points: Vec<Point<T>>,
pub closed: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Polygon<T> {
pub vertex: Vec<Point<T>>,
}
impl<T> Polygon<T> {
pub fn new<P>(points: Vec<P>) -> Self
where
Point<T>: From<P>,
{
Self { vertex: points.into_iter().map(|p| p.into()).collect() }
}
}
impl<T> Polyline<T> {
pub fn new<P>(points: Vec<P>) -> Self
where
Point<T>: From<P>,
{
Self { points: points.into_iter().map(|p| p.into()).collect(), closed: true }
}
}