convert Python footprint generators to Python 3
[hw/altusmetrum] / packages / PDV-P8103.py
1 #!/usr/bin/python3
2 # Copyright 2021 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Program to emit PCB footprint for Luna CDS Photoconductive Photocell
5 #
6
7 import math
8
9 # dimensions in mm from PDV-P8103.pdf Luna Optoelectronics datasheet
10 BodyDiam = 5.08
11 HoleDiam = 0.5          # pins are 0.4mm, make hole large enough
12 HoleSpacing = 3.40
13 FlatSpacing = 4.29
14
15 FlatHalfLength = math.sqrt((BodyDiam / 2)**2 - (FlatSpacing / 2)**2)
16 ArcStart = 180 * math.atan((FlatSpacing/2)/FlatHalfLength)/math.pi
17
18 # we're going to use the 1/100 of a mil fundamental unit form
19 def mm2mils100( mm ):
20         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
21
22 print('# author: Bdale Garbee')
23 print('# email: bdale@gag.com')
24 print('# dist-license: GPL 3')
25 print('# use-license: unlimited')
26
27 print('Element[0x0 "PDV-P8103" "" "" 0 0 0 0 0 100 0x0]')
28 print("(")
29 print('   Pin[',\
30         mm2mils100(-HoleSpacing/2), \
31         0, \
32         mm2mils100(2.5*HoleDiam), \
33         mm2mils100(0.5), \
34         mm2mils100(3*HoleDiam), \
35         mm2mils100(HoleDiam), \
36         '"pin1" "1" 0x0001]')
37
38 print('   Pin[',\
39         mm2mils100(HoleSpacing/2), \
40         0, \
41         mm2mils100(2.5*HoleDiam), \
42         mm2mils100(0.5), \
43         mm2mils100(3*HoleDiam), \
44         mm2mils100(HoleDiam), \
45         '"pin2" "2" 0x0001]')
46
47 print('   ElementArc[',\
48         0, \
49         0, \
50         mm2mils100(BodyDiam/2), \
51         mm2mils100(BodyDiam/2), \
52         ArcStart, \
53         -2 * ArcStart, \
54         1000, \
55         ']')
56
57 print('   ElementArc[',\
58         0, \
59         0, \
60         mm2mils100(BodyDiam/2), \
61         mm2mils100(BodyDiam/2), \
62         ArcStart + 180, \
63         -2 * ArcStart, \
64         1000, \
65         ']')
66
67 print('   ElementLine[',\
68         mm2mils100(-FlatHalfLength), \
69         mm2mils100(-FlatSpacing/2), \
70         mm2mils100(FlatHalfLength), \
71         mm2mils100(-FlatSpacing/2), \
72         1000, \
73         ']')
74
75 print('   ElementLine[',\
76         mm2mils100(-FlatHalfLength), \
77         mm2mils100(FlatSpacing/2), \
78         mm2mils100(FlatHalfLength), \
79         mm2mils100(FlatSpacing/2), \
80         1000, \
81         ']')
82
83 print(")")