maker_panel/features/
mechanical_solder_point.rs1use super::InnerAtom;
2use crate::Layer;
3use geo::{Coordinate, Rect};
4use std::fmt;
5
6#[derive(Debug, Clone)]
8pub struct MechanicalSolderPoint {
9 center: Coordinate<f64>,
10 size: (f64, f64),
11 drill_radius: f64,
12}
13
14impl MechanicalSolderPoint {
15 pub fn with_size(size: (f64, f64)) -> Self {
17 Self {
18 size,
19 ..Self::default()
20 }
21 }
22
23 fn rect(&self) -> Rect<f64> {
24 Rect::new(
25 self.center
26 + Coordinate {
27 x: -self.size.0 / 2.,
28 y: -self.size.1 / 2.,
29 },
30 self.center
31 + Coordinate {
32 x: self.size.0 / 2.,
33 y: self.size.1 / 2.,
34 },
35 )
36 }
37}
38
39impl Default for MechanicalSolderPoint {
40 fn default() -> Self {
41 Self {
42 center: [0., 0.].into(),
43 size: (1.175, 1.45),
44 drill_radius: 0.15,
45 }
46 }
47}
48
49impl fmt::Display for MechanicalSolderPoint {
50 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
51 write!(f, "msp({:?})", self.size)
52 }
53}
54
55impl super::InnerFeature for MechanicalSolderPoint {
56 fn name(&self) -> &'static str {
57 "msp"
58 }
59
60 fn translate(&mut self, v: Coordinate<f64>) {
61 self.center = self.center + v;
62 }
63
64 fn atoms(&self) -> Vec<InnerAtom> {
65 vec![
66 InnerAtom::Rect {
67 layer: Layer::BackCopper,
68 rect: self.rect(),
69 },
70 InnerAtom::Rect {
71 layer: Layer::BackMask,
72 rect: self.rect(),
73 },
74 InnerAtom::Rect {
75 layer: Layer::FrontCopper,
76 rect: self.rect(),
77 },
78 InnerAtom::Rect {
79 layer: Layer::FrontMask,
80 rect: self.rect(),
81 },
82 InnerAtom::Drill {
83 center: self.center,
84 radius: self.drill_radius,
85 plated: true,
86 },
87 ]
88 }
89}