maker_panel/features/
smiley.rs

1use super::InnerAtom;
2use crate::Layer;
3use geo::{Coordinate, Rect};
4use std::fmt;
5
6/// An interior feature that just renders a smiley on the front silkscreen.
7#[derive(Debug, Clone)]
8pub struct Smiley {
9    center: Coordinate<f64>,
10}
11
12impl Default for Smiley {
13    fn default() -> Self {
14        Self {
15            center: [0., 0.].into(),
16        }
17    }
18}
19
20impl fmt::Display for Smiley {
21    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
22        write!(f, "smiley(center = {:?})", self.center,)
23    }
24}
25
26impl super::InnerFeature for Smiley {
27    fn name(&self) -> &'static str {
28        "smiley"
29    }
30
31    fn translate(&mut self, v: Coordinate<f64>) {
32        self.center = self.center + v;
33    }
34
35    fn atoms(&self) -> Vec<InnerAtom> {
36        vec![
37            InnerAtom::Circle {
38                center: self.center
39                    + Coordinate {
40                        x: -0.6f64,
41                        y: -0.6f64,
42                    },
43                radius: 0.4,
44                layer: Layer::FrontLegend,
45            },
46            InnerAtom::Circle {
47                center: self.center
48                    + Coordinate {
49                        x: 0.6f64,
50                        y: -0.6f64,
51                    },
52                radius: 0.4,
53                layer: Layer::FrontLegend,
54            },
55            InnerAtom::Rect {
56                layer: Layer::FrontLegend,
57                rect: Rect::new(
58                    self.center
59                        + Coordinate {
60                            x: -1.4f64,
61                            y: 0.15f64,
62                        },
63                    self.center
64                        + Coordinate {
65                            x: -1.0f64,
66                            y: 0.9f64,
67                        },
68                ),
69            },
70            InnerAtom::Rect {
71                layer: Layer::FrontLegend,
72                rect: Rect::new(
73                    self.center
74                        + Coordinate {
75                            x: -1.0f64,
76                            y: 0.6f64,
77                        },
78                    self.center
79                        + Coordinate {
80                            x: 1.0f64,
81                            y: 0.9f64,
82                        },
83                ),
84            },
85            InnerAtom::Rect {
86                layer: Layer::FrontLegend,
87                rect: Rect::new(
88                    self.center
89                        + Coordinate {
90                            x: 1.0f64,
91                            y: 0.9f64,
92                        },
93                    self.center
94                        + Coordinate {
95                            x: 1.4f64,
96                            y: 0.15f64,
97                        },
98                ),
99            },
100        ]
101    }
102}