convert Python footprint generators to Python 3
[hw/altusmetrum] / packages / norcomp / 182-male.py
1 #!/usr/bin/python3
2 # Copyright 2016 by Bdale Garbee <bdale@gag.com>.  GPLv3+
3 #
4 # Program to emit PCB footprint for Norcomp 182-YYY-113RYY1 connectors
5 # Male, right angle, 0.318 setback
6 #
7 # Needs pin count on command line, 9/15/25/37 are valid
8 #
9
10 # dimensions in mm from R182-YYY-213RYY1-1.pdf
11
12 PinDiam = 1.09
13 PinSpacing = 2.77
14 RowSpacing = 2.84
15 MntDiam = 3.05
16 BoxY = 12.42
17 FaceY = 8.08
18 ARing = 0.8
19 Clearance = 0.36
20
21 LineWidth = 1000
22
23 import sys
24
25 # we're going to use the 1/100 of a mil fundamental unit form
26 def mm2mils100( mm ):
27         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
28
29 pins = int(sys.argv[1])
30
31 if pins == 9:
32         BoxX = 30.80
33         MntX = 24.99
34 elif pins == 15:
35         BoxX = 39.14
36         MntX = 33.32
37 elif pins == 25:
38         BoxX = 53.04
39         MntX = 47.04
40 elif pins == 37:
41         BoxX = 69.32
42         MntX = 63.50
43 else:
44         sys.stderr.write('Valid pin counts are 9|15|25|37\n')
45         sys.exit(1)
46
47 pinoffset = -(pins - 1) / 4 * PinSpacing
48 if pins == 15:
49         pinoffset += PinSpacing/2
50
51 print('# author: Bdale Garbee')
52 print('# email: bdale@gag.com')
53 print('# dist-license: GPL 3+')
54 print('# use-license: unlimited')
55
56 print('Element[0x0 "DB%iM"' % pins,'"" "" 0 0 0 0 0 100 0x0]')
57 print("(")
58 for col in range (int((pins+1)/2)):
59         pinnum = col + 1
60         if pinnum == 1:
61             Flags = '0x0101'
62         else:
63             Flags = '0x0001'
64
65         print('   Pin[', \
66             mm2mils100(-(pinnum-1)*PinSpacing-pinoffset), \
67             mm2mils100(RowSpacing/2), \
68             mm2mils100(PinDiam+ARing), \
69             mm2mils100(Clearance), \
70             mm2mils100(PinDiam+ARing+Clearance), \
71             mm2mils100(PinDiam), \
72             '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
73
74         pinnum = col + 1 + (pins+1)/2
75         Flags = '0x0001'
76         if pinnum <= pins:
77           print('   Pin[', \
78             mm2mils100(-(col)*PinSpacing-pinoffset-PinSpacing/2), \
79             mm2mils100(-RowSpacing/2), \
80             mm2mils100(PinDiam+ARing), \
81             mm2mils100(Clearance), \
82             mm2mils100(PinDiam+ARing+Clearance), \
83             mm2mils100(PinDiam), \
84             '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
85
86
87 pinnum = pins + 1
88
89 print('   Pin[', \
90     mm2mils100(MntX/2), \
91     mm2mils100(0), \
92     mm2mils100(MntDiam+ARing), \
93     mm2mils100(Clearance), \
94     mm2mils100(MntDiam+ARing+Clearance), \
95     mm2mils100(MntDiam), \
96     '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
97
98 print('   Pin[', \
99     mm2mils100(-MntX/2), \
100     mm2mils100(0), \
101     mm2mils100(MntDiam+ARing), \
102     mm2mils100(Clearance), \
103     mm2mils100(MntDiam+ARing+Clearance), \
104     mm2mils100(MntDiam), \
105     '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
106
107 print('   ElementLine[', \
108         mm2mils100(-BoxX/2), \
109         mm2mils100(-FaceY-RowSpacing/2), \
110         mm2mils100(BoxX/2), \
111         mm2mils100(-FaceY-RowSpacing/2), \
112         LineWidth, ']')
113
114 print('   ElementLine[', \
115         mm2mils100(-BoxX/2), \
116         mm2mils100(BoxY-FaceY-RowSpacing/2), \
117         mm2mils100(BoxX/2), \
118         mm2mils100(BoxY-FaceY-RowSpacing/2), \
119         LineWidth, ']')
120
121 print('   ElementLine[', \
122         mm2mils100(BoxX/2), \
123         mm2mils100(-FaceY-RowSpacing/2), \
124         mm2mils100(BoxX/2), \
125         mm2mils100(BoxY-FaceY-RowSpacing/2), \
126         LineWidth, ']')
127
128 print('   ElementLine[', \
129         mm2mils100(-BoxX/2), \
130         mm2mils100(-FaceY-RowSpacing/2), \
131         mm2mils100(-BoxX/2), \
132         mm2mils100(BoxY-FaceY-RowSpacing/2), \
133         LineWidth, ']')
134
135 print(")")