aboutsummaryrefslogtreecommitdiff
path: root/ergogen/footprints/mx6c_ulp.js
blob: a162889a72e57be0958da8df0bc73df7183922fa (plain)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
module.exports = {
    params: {
        designator: 's',
        side: 'f',
        reversible: false,
        hotswap: false,
        include_silkscreen: true,
        include_keycaps: true,
        keycap_width: 17.5,
        keycap_height: 16.5,
        switch_3dmodel_filename: 'PG1316S.step',
        switch_3dmodel_xyz_offset: [-4.75, -6.25, -10.25], // [-5.45, 0, 3] for MX6C
        switch_3dmodel_xyz_rotation: [0,0,0], // [0, 0, -90] for MX6C
        switch_3dmodel_xyz_scale: [1, 1, 1],
        from: undefined,
        to: undefined,
        ground: undefined,
    },
    body: p => {
        const keycap_xo = 0.5 * p.keycap_width
        const keycap_yo = 0.5 * p.keycap_height

        // Original elements
        let footprint = `
        (footprint "ULP_HANDSOLDER" (version 20260313) (generator pcbnew)
          (layer "F.Cu")
          ${p.at}
          (attr smd)
          (property "Reference" "${p.ref}"
              (at -0.05 -7.5 ${p.r})
              (unlocked yes)
              (layer "F.SilkS")
              ${p.ref_hide}
              (effects (font (size 1 1) (thickness 0.15)))
          )
          (property "Value" "ULP_SW"
              (at 0 0 ${p.r})
              (unlocked yes)
              (layer "F.Fab")
              (hide yes)
              (effects (font (size 1 1) (thickness 0.15)))
          )
          ${p.include_silkscreen ? `
        (fp_poly
         (pts
          (xy -7.1 -6.4) (xy 7.1 -6.4) (xy 7.1 6.4) (xy -7.1 6.4)
         )
         (stroke (width 0.1) (type solid))
         (fill no)
         (layer "F.SilkS")
        )
        ` : ''}
          (fp_poly
            (pts
              (xy -6.8 -6.1) (xy 6.8 -6.1) (xy 6.8 6.1) (xy -6.8 6.1)
            )
            (stroke (width 0.1) (type solid))
            (fill no)
            (layer "F.CrtYd")
          )
          ${p.include_keycaps ? `
        (fp_rect (start ${keycap_xo} ${keycap_yo}) (end ${-keycap_xo} ${-keycap_yo})
         (stroke (width 0.15) (type solid))
         (fill no)
         (layer "Dwgs.User")
        )
        ` : ''}
          (fp_line (start -2.4 4.5) (end -2.4 3.4)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_line (start -1.4 2.4) (end 2.6 2.4)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_line (start 2.6 5.5) (end -1.4 5.5)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_line (start 3.6 3.4) (end 3.6 4.5)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_arc (start -2.4 3.4) (mid -2.107107 2.692893) (end -1.4 2.4)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_arc (start -1.4 5.5) (mid -2.107107 5.207107) (end -2.4 4.5)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_arc (start 2.6 2.4) (mid 3.307107 2.692893) (end 3.6 3.4)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_arc (start 3.6 4.5) (mid 3.307108 5.207107) (end 2.6 5.5)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (pad "" np_thru_hole circle (at -5.8 1.2 ${p.r}) (size 1.05 1.05) (drill 1.05) (layers "*.Cu" "*.Mask"))
          (pad "" np_thru_hole circle (at -5.8 2.75 ${p.r}) (size 1.05 1.05) (drill 1.05) (layers "*.Cu" "*.Mask"))
          (pad "" np_thru_hole oval (at 5.825 -3.0 ${p.r}) (size 1.3 1.85) (drill oval 1.3 1.85) (layers "*.Cu" "*.Mask"))
          (pad "" np_thru_hole oval (at 5.825 3.0 ${p.r}) (size 1.3 1.85) (drill oval 1.3 1.85) (layers "*.Cu" "*.Mask"))
          (pad "1" thru_hole circle (at -0.5 2.4 ${p.r}) (size 1.3 1.3) (drill 1.1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) ${p.from})
          (pad "2" thru_hole circle (at 1.8 2.4 ${p.r}) (size 1.3 1.3) (drill 1.1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) ${p.to})
          (pad "3" smd rect (at -5.9 -5.4 ${p.r}) (size 2.5 2.0) (layers "F.Cu" "F.Mask") ${p.ground || ''})
          (pad "3" smd rect (at -5.9 5.4 ${p.r}) (size 2.5 2.0) (layers "F.Cu" "F.Mask") ${p.ground || ''})
          (pad "3" smd rect (at 5.9 -5.4 ${p.r}) (size 2.5 2.0) (layers "F.Cu" "F.Mask") ${p.ground || ''})
          (pad "3" smd rect (at 5.9 5.4 ${p.r}) (size 2.5 2.0) (layers "F.Cu" "F.Mask") ${p.ground || ''})
      `;

        // Add mirrored elements if reversible is true
        if (p.reversible) {
            footprint += `
          (fp_line (start -2.4 -4.5) (end -2.4 -3.4)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_line (start -1.4 -2.4) (end 2.6 -2.4)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_line (start 2.6 -5.5) (end -1.4 -5.5)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_line (start 3.6 -3.4) (end 3.6 -4.5)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_arc (start -2.4 -3.4) (mid -2.107107 -2.692893) (end -1.4 -2.4)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_arc (start -1.4 -5.5) (mid -2.107107 -5.207107) (end -2.4 -4.5)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_arc (start 2.6 -2.4) (mid 3.307107 -2.692893) (end 3.6 -3.4)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (fp_arc (start 3.6 -4.5) (mid 3.307108 -5.207107) (end 2.6 -5.5)
            (stroke (width 0.05) (type default))
            (layer "Edge.Cuts")
          )
          (pad "" np_thru_hole circle (at -5.8 -1.2 ${p.r}) (size 1.05 1.05) (drill 1.05) (layers "*.Cu" "*.Mask"))
          (pad "" np_thru_hole circle (at -5.8 -2.75 ${p.r}) (size 1.05 1.05) (drill 1.05) (layers "*.Cu" "*.Mask"))
          (pad "1" thru_hole circle (at -0.5 -2.4 ${p.r}) (size 1.3 1.3) (drill 1.1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) ${p.from})
          (pad "2" thru_hole circle (at 1.8 -2.4 ${p.r}) (size 1.3 1.3) (drill 1.1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) ${p.to})
          (pad "3" smd rect (at -5.9 5.4 ${p.r}) (size 2.5 2.0) (layers "B.Cu" "B.Mask") ${p.ground || ''})
          (pad "3" smd rect (at -5.9 -5.4 ${p.r}) (size 2.5 2.0) (layers "B.Cu" "B.Mask") ${p.ground || ''})
          (pad "3" smd rect (at 5.9 5.4 ${p.r}) (size 2.5 2.0) (layers "B.Cu" "B.Mask") ${p.ground || ''})
          (pad "3" smd rect (at 5.9 -5.4 ${p.r}) (size 2.5 2.0) (layers "B.Cu" "B.Mask") ${p.ground || ''})
          (pad "" thru_hole circle (at -5.9 -5.4 ${p.r}) (size 1.05 1.05) (drill 0.6) (layers "*.Cu"))
          (pad "" thru_hole circle (at -5.9 5.4 ${p.r}) (size 1.05 1.05) (drill 0.6) (layers "*.Cu"))
          (pad "" thru_hole circle (at 5.9 -5.4 ${p.r}) (size 1.05 1.05) (drill 0.6) (layers "*.Cu"))
          (pad "" thru_hole circle (at 5.9 5.4 ${p.r}) (size 1.05 1.05) (drill 0.6) (layers "*.Cu"))
        `;
        }

        // Add 3D models if specified
        if (p.switch_3dmodel_filename) {
            footprint += `
          (model ${p.switch_3dmodel_filename}
            (offset (xyz ${p.switch_3dmodel_xyz_offset[0]} ${p.switch_3dmodel_xyz_offset[1]} ${p.switch_3dmodel_xyz_offset[2]}))
            (scale (xyz ${p.switch_3dmodel_xyz_scale[0]} ${p.switch_3dmodel_xyz_scale[1]} ${p.switch_3dmodel_xyz_scale[2]}))
            (rotate (xyz ${p.switch_3dmodel_xyz_rotation[0]} ${p.switch_3dmodel_xyz_rotation[1]} ${p.switch_3dmodel_xyz_rotation[2]}))
          )
        `;
        }

        footprint += `
        )
      `;

        return footprint;
    }
}