2 # Copyright 2007 by Bdale Garbee <bdale@gag.com>. GPLv2
4 # Program to emit PCB footprint for Samtec QTH-XXX-02-X-D-A connectors
8 # dimensions in mm from qth-xxx-xx-x-d-xxx-footprint.pdf
13 RowSpacing = (3.09 * 2) - PinHeight
17 ShortPaddleWidth = 2.54
18 LongPaddleWidth = 4.70
23 # Needs pin count per row on command line, 30/60/90/120/150 are valid
24 positions = int(sys.argv[1])
25 ordinal = positions / 30.0
26 if (ordinal < 1) or (ordinal > 5) or (positions%30 != 0):
27 sys.stderr.write('Invalid number of positions, must be 30|60|90|120|150.\n')
30 BodyWidth = (positions / 30) * 20.003 + 1.27
32 HoleSpacing = (positions / 30) * 20.00 - 1.52
34 # we're going to use the 1/100 of a mil fundamental unit form
36 return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
38 print '# author: Bdale Garbee'
39 print '# email: bdale@gag.com'
40 print '# dist-license: GPL 2'
41 print '# use-license: unlimited'
43 print 'Element[0x0 "QSH-%i"' % positions,' "" "" 0 0 -10161 -12011 0 100 0x0]'
45 for pin in range (0,positions):
47 mm2mils100((pin-(positions/2 - 0.5)) * PinSpacing), \
48 mm2mils100(-(RowSpacing/2 + PinWidth/2)), \
49 mm2mils100((pin-(positions/2 - 0.5)) * PinSpacing), \
50 mm2mils100(-(RowSpacing/2 + PinHeight - PinWidth/2)), \
51 mm2mils100(PinWidth), \
53 mm2mils100(PinWidth+MaskAdd), \
54 '"pin%i"' % (1 + pin*2), '"%i"' % (1 + pin*2), '0x0100]'
57 mm2mils100((pin-(positions/2 - 0.5)) * PinSpacing), \
58 mm2mils100(RowSpacing/2 + PinWidth/2), \
59 mm2mils100((pin-(positions/2 - 0.5)) * PinSpacing), \
60 mm2mils100(RowSpacing/2 + PinHeight - PinWidth/2), \
61 mm2mils100(PinWidth), \
63 mm2mils100(PinWidth+MaskAdd), \
64 '"pin%i"' % (2 + pin*2), '"%i"' % (2 + pin*2), '0x0100]'
68 mm2mils100(-ShortPaddleCC/2 - ShortPaddleWidth/2 + PaddleHeight/2), \
70 mm2mils100(-ShortPaddleCC/2 + ShortPaddleWidth/2 - PaddleHeight/2), \
72 mm2mils100(PaddleHeight), \
74 mm2mils100(PaddleHeight+MaskAdd), \
78 mm2mils100(ShortPaddleCC/2 - ShortPaddleWidth/2 + PaddleHeight/2), \
80 mm2mils100(ShortPaddleCC/2 + ShortPaddleWidth/2 - PaddleHeight/2), \
82 mm2mils100(PaddleHeight), \
84 mm2mils100(PaddleHeight+MaskAdd), \
88 mm2mils100(-LongPaddleCC/2 - LongPaddleWidth/2 + PaddleHeight/2), \
90 mm2mils100(-LongPaddleCC/2 + LongPaddleWidth/2 - PaddleHeight/2), \
92 mm2mils100(PaddleHeight), \
94 mm2mils100(PaddleHeight+MaskAdd), \
98 mm2mils100(LongPaddleCC/2 - LongPaddleWidth/2 + PaddleHeight/2), \
100 mm2mils100(LongPaddleCC/2 + LongPaddleWidth/2 - PaddleHeight/2), \
102 mm2mils100(PaddleHeight), \
104 mm2mils100(PaddleHeight+MaskAdd), \
108 mm2mils100(HoleSpacing/2), \
109 mm2mils100(-HoleOffset), \
110 mm2mils100(HoleDiam)+1400, \
112 mm2mils100(HoleDiam)+1400+600, \
113 mm2mils100(HoleDiam), \
114 '"mnt" "0"', '0x0000', ']'
117 mm2mils100(-HoleSpacing/2), \
118 mm2mils100(-HoleOffset), \
119 mm2mils100(HoleDiam)+1400, \
121 mm2mils100(HoleDiam)+1400+600, \
122 mm2mils100(HoleDiam), \
123 '"mnt" "0"', '0x0000', ']'
125 print ' ElementLine[',\
126 mm2mils100(-BodyWidth/2), \
127 mm2mils100(-BodyHeight/2), \
128 mm2mils100(-BodyWidth/2), \
129 mm2mils100( BodyHeight/2), \
132 print ' ElementLine[',\
133 mm2mils100(-BodyWidth/2), \
134 mm2mils100( BodyHeight/2), \
135 mm2mils100( BodyWidth/2), \
136 mm2mils100( BodyHeight/2), \
139 print ' ElementLine[',\
140 mm2mils100( BodyWidth/2), \
141 mm2mils100( BodyHeight/2), \
142 mm2mils100( BodyWidth/2), \
143 mm2mils100(-BodyHeight/2), \
146 print ' ElementLine[',\
147 mm2mils100( BodyWidth/2), \
148 mm2mils100(-BodyHeight/2), \
149 mm2mils100(-BodyWidth/2), \
150 mm2mils100(-BodyHeight/2), \
153 print ' ElementArc[',\
154 mm2mils100(-(positions/2 + 0.5) * PinSpacing), \
155 mm2mils100(-(RowSpacing/2+PinHeight*5/4)), \
156 '500 500 0 360 1000 ]'