maker_panel/features/
smiley.rs1use super::InnerAtom;
2use crate::Layer;
3use geo::{Coordinate, Rect};
4use std::fmt;
5
6#[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}