convert lga16.py to Python3, confirmed identical output
[hw/altusmetrum] / packages / udfn8.5c
1 /*
2  * Copyright © 2021 Bdale Garbee <bdale@gag.com>
3  * GPL v3
4  */
5
6 /* intended for use with the onsemi CAT24C32 eeprom and similar chips */
7
8 load "footprint.5c"
9 import Footprint;
10
11 real pad_width = 0.68;
12 real pad_height = 0.30;
13 real pad_spacing = 0.50;                /* center to center, along the pads */
14 real pad_center = 3.40-pad_width;       /* center to center, across the part */
15
16 real center_width = 1.45;
17 real center_height = 1.56;
18
19 real package_width = 3;
20 real package_height = 2;
21
22 real pad_x_off = pad_center / 2;
23
24 real num_pad = 4;       /* per side */
25
26 element_start("udfn8");
27
28 real pad_off(int n) {
29         return pad_spacing * (n - (num_pad - 1) / 2);
30 }
31
32 real corner(int dx, int dy) {
33         real    x = dx * package_width / 2;
34         real    y = dy * package_height / 2;
35         real    len = 0.4;
36
37         line(x, y, x - dx * len, y);
38         line(x, y, x, y - dy * len);
39 }
40
41 corner(-1, -1);
42 corner(1, -1);
43 corner(-1, 1);
44 corner(1, 1);
45
46 real dot_off = -.3;
47
48 line(-package_width/2 + dot_off, -package_height/2 + dot_off,
49      -package_width/2 + dot_off, -package_height/2 + dot_off);
50
51 for (int pad = 0; pad < num_pad; pad++) {
52         /* left side (1-4) */
53
54         pad_mm(-pad_x_off,
55                pad_off(pad),
56                pad_width,
57                pad_height,
58                sprintf("%d", pad + 1),
59                sprintf("%d", pad + 1));
60         
61         /* right side (5-8) */
62
63         pad_mm(pad_x_off,
64                -pad_off(pad),
65                pad_width,
66                pad_height,
67                sprintf("%d", pad + 5),
68                sprintf("%d", pad + 5));
69         
70 }
71
72 /* center pad */
73 pad_mm(0, 0,
74        center_width,
75        center_height,
76        "9", "9");
77
78 element_end();