update to python3
[hw/altusmetrum] / packages / molex / pico-ezmate.py
1 #!/usr/bin/python3
2 # author: Keith Packard
3 # email: keithp@keithp.com
4 # dist-license: GPL 2
5 # use-license: unlimited
6
7 import sys
8
9 def mm2mils100( mm ):
10         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
11
12 PadWidth = 0.60
13 PadHeight = 0.85
14 PadSpacing = 1.20
15 PadToHoldX = 0.80
16 PadToHoldY = 3.75
17 HoldWidth = 0.70
18 HoldHeight = 0.80
19 Clearance = 0.6
20
21 OutlineX = 1.5
22 OutlineYPad = - (0.38 / 2)
23 OutlineYHold = OutlineYPad + 4.5
24
25 NumPad=int(sys.argv[1])
26
27 print('# author: Keith Packard')
28 print('# email: keithp@keithp.com')
29 print('# dist-license: GPL 2')
30 print('# use-license: unlimited')
31
32 print('Element["" "pico-ezmate-%d" "" "" 0 0 0 0 0 100 ""]' % NumPad)
33 print("(")
34
35 PadX = PadSpacing * NumPad / 2
36
37 # Hold-down pads
38
39 HoldY = PadHeight / 2 + PadToHoldY - HoldHeight / 2
40
41 def pad(cx, cy, w, h, name, num):
42     x1 = 0
43     y1 = 0
44     x2 = 0
45     y2 = 0
46     thickness = 0
47     if w > h:
48         thickness = h
49         y1 = cy
50         x1 = cx - (w - h) / 2
51         y2 = cy
52         x2 = cx + (w - h) / 2
53     else:
54         thickness = w
55         x1 = cx
56         y1 = cy - (h - w) / 2
57         x2 = cx
58         y2 = cy + (h - w) / 2
59     mask = thickness + Clearance / 2
60     print('    Pad[',\
61         mm2mils100(x1), \
62         mm2mils100(y1), \
63         mm2mils100(x2), \
64         mm2mils100(y2), \
65         mm2mils100(thickness), \
66         mm2mils100(Clearance), \
67         mm2mils100(mask),\
68         '"%s"' % name, '"%s"' % num, '"square"]')
69     
70 def line(x1, y1, x2, y2):
71     print('    ElementLine[',\
72         mm2mils100(x1), \
73         mm2mils100(y1), \
74         mm2mils100(x2), \
75         mm2mils100(y2), \
76         '500]')
77     
78 def rect(x, y, w, h):
79     line(x,y,x+w,y)
80     line(x+w,y,x+w,y+h)
81     line(x+w,y+h,x,y+h)
82     line(x,y+h,x,y)
83
84 def padx(p):
85     return -PadSpacing * (NumPad-1) / 2 + PadSpacing * (p - 1)
86
87 def holdx(h):
88     return h * (padx(1) - PadToHoldX - HoldWidth / 2)
89
90
91 for p in range(1,NumPad+1):
92     pad(padx(p), 0, PadWidth, PadHeight, 'pin%i' % p, '%i' % p)
93
94 for h in -1, 1:
95     pad(holdx(h), HoldY, HoldWidth, HoldHeight, 'GND', 'GND')
96
97 rect(padx(1) - OutlineX, OutlineYPad,
98      PadSpacing * (NumPad-1) + OutlineX*2,
99      4.5)
100
101 print('    )')
102         # 11000 2000
103 #       ElementLine[-11000 -1000 -3600 -1000 100]
104 #       ElementLine[  3600 -1000 11000 -1000 100]
105 #
106 #       ElementLine[11000 -1000 11000 17000 100]
107 #       ElementLine[11000 17000 6000 17000 100]
108 #       ElementLine[ 6000 17000 4000 15000 100]
109 #       ElementLine[ 4000 15000 -4000 15000 100]
110 #       ElementLine[-4000 15000 -6000 17000 100]
111 #       ElementLine[-6000 17000 -11000 17000 100]
112 #       ElementLine[-11000 17000 -11000 -1000 100]
113 #       )
114 #