math2d/
triangle.rs

1//! Represents a triangle described by its 3 corners.
2
3use point2f::Point2f;
4
5#[cfg(all(windows, feature = "d2d"))]
6use winapi::um::d2d1::D2D1_TRIANGLE;
7
8/// Represents a triangle described by its 3 corners.
9#[derive(Copy, Clone, Debug, Default, PartialEq)]
10#[cfg_attr(feature = "serde_derive", derive(Serialize, Deserialize))]
11#[repr(C)]
12pub struct Triangle {
13    /// The first point
14    pub p1: Point2f,
15    /// The second point
16    pub p2: Point2f,
17    /// The third point
18    pub p3: Point2f,
19}
20
21impl<P1, P2, P3> From<(P1, P2, P3)> for Triangle
22where
23    P1: Into<Point2f>,
24    P2: Into<Point2f>,
25    P3: Into<Point2f>,
26{
27    #[inline]
28    fn from((p1, p2, p3): (P1, P2, P3)) -> Triangle {
29        Triangle {
30            p1: p1.into(),
31            p2: p2.into(),
32            p3: p3.into(),
33        }
34    }
35}
36
37#[cfg(all(windows, feature = "d2d"))]
38impl From<Triangle> for D2D1_TRIANGLE {
39    #[inline]
40    fn from(seg: Triangle) -> D2D1_TRIANGLE {
41        D2D1_TRIANGLE {
42            point1: seg.p1.into(),
43            point2: seg.p2.into(),
44            point3: seg.p3.into(),
45        }
46    }
47}
48
49#[cfg(all(windows, feature = "d2d"))]
50impl From<D2D1_TRIANGLE> for Triangle {
51    #[inline]
52    fn from(seg: D2D1_TRIANGLE) -> Triangle {
53        Triangle {
54            p1: seg.point1.into(),
55            p2: seg.point2.into(),
56            p3: seg.point3.into(),
57        }
58    }
59}