cylindertransport.py

Sun, 02 Apr 2017 23:59:00 +0200

author
mdd
date
Sun, 02 Apr 2017 23:59:00 +0200
changeset 0
007bbb709982
child 1
14a420653a5f
permissions
-rw-r--r--

cylinder transport spacer calculation

0
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
1 from math import sqrt
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
2 from PIL import Image, ImageDraw, ImageFont
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
3 import argparse, sys
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
4
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
5 # pfad zu den TTF files (arial.ttf)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
6 FONTBASE = "/usr/share/fonts/truetype/msttcorefonts/"
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
7
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
8 SPACE_MIN = 10 # minimum offset between bottles
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
9
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
10 # Durchmesser, Laenge, Volumen und Gewicht der verfuegbaren Tauchflaschen
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
11 CYLINDER = {
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
12 "03" : [100, 515, 3, 4.7],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
13 "05" : [140, 466, 5, 5.7],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
14 "07" : [140, 605, 7, 8.8],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
15 "08" : [171, 490, 8, 10.4],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
16 "10" : [171, 595, 10, 12.4],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
17 "12S" : [204, 550, 12, 15.4],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
18 "12L" : [171, 690, 12, 14.5],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
19 "15" : [204, 640, 15, 18.1],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
20 }
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
21
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
22 PIPES = [
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
23 ["DN8", 13.5],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
24 ["DN10", 17.2],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
25 ["DN15", 21.3],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
26 ["DN20", 26.9],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
27 ["DN25", 33.7],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
28 ["DN32", 42.4],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
29 ["DN40", 48.3],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
30 ["DN50", 60.3],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
31 ["DN65", 76.1],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
32 ["DN80", 88.9],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
33 ["DN100", 114.3],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
34 ["DN125", 139.7],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
35 ["DN150", 168.3],
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
36 ]
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
37
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
38
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
39
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
40 def offset(r1, r2):
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
41 o = (2*sqrt(r1*r2))
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
42 #print "offset %i" % o
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
43 return o
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
44
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
45 def calc_min(r1, r2):
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
46 # stupider annaehreungsversuch, bis sich die beiden Tauchflaschen r1 und r2 nicht mehr beruehren
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
47 #print "r1=%.0f r2=%.0f" % (r1, r2)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
48 for p in PIPES:
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
49 i = p[1] / 2
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
50 if i>r1 or i>r2:
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
51 print "spacer radius > r1 or r2, abort"
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
52 return None
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
53 x1 = offset(r1, i)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
54 x2 = offset(r2, i)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
55 x = (x1 + x2) - (r1+r2)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
56 if x >= SPACE_MIN:
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
57 print "%s Pipe (%.1fmm), Cylinder spacing: %imm" % (p[0], p[1], x)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
58 return [r1, i, r2, p[0]]
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
59 return None
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
60
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
61 def circ(draw, x, r, txt = "", txtfactor = 1.0):
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
62 draw.arc([x-r, 0, x + r, 2 * r], 0, 360, 'white')
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
63 if txt != "":
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
64 font = ImageFont.truetype(FONTBASE+"arial.ttf", int(24*txtfactor))
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
65 tox, toy = draw.textsize(txt, font=font)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
66 draw.text((x-tox/2, r-toy/2), txt, font=font, fill='#ffffff')
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
67
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
68
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
69 def draw_bottles(draw, args):
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
70 bottles = args.cylinders
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
71 SPACE_MIN = args.space_min
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
72
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
73 spacerY1 = 200
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
74 spacerY2 = 220
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
75 # first bottle spacer
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
76 r1 = CYLINDER[bottles[0]][0] / 2
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
77 r2 = CYLINDER[bottles[1]][0] / 2
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
78 x = 20 + r1 # start offset x
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
79 r1, r2, r3, dn = calc_min(r1, r2)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
80 circ(draw, x, r2, dn, 0.5)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
81 x = x + offset(r2, r3)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
82
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
83 for i in range(0, len(bottles)-1):
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
84 r1 = CYLINDER[bottles[i]][0] / 2
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
85 r2 = CYLINDER[bottles[i+1]][0] / 2
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
86 r1, r2, r3, dn = calc_min(r1, r2)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
87 # draw bottle
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
88 circ(draw, x, r1, "Tank "+bottles[i])
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
89 sx1 = x+r1
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
90 x = x + offset(r1, r2)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
91 # draw right spacer
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
92 circ(draw, x, r2, dn, 0.5)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
93 x = x + offset(r2, r3)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
94 sx2 = x-r3
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
95 if i == (len(bottles)-2):
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
96 # draw last bottle
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
97 circ(draw, x, r3, "Tank "+bottles[i+1])
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
98 x = x + offset(r2, r3)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
99 # draw the space between bottles
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
100 draw.line((sx1, spacerY1, sx1, spacerY2), fill='#ffffff')
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
101 draw.line((sx2, spacerY1, sx2, spacerY2), fill='#ffffff')
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
102 txt = "%imm" % (sx2-sx1)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
103 font = ImageFont.truetype(FONTBASE+"arial.ttf", 12)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
104 tox, toy = draw.textsize(txt, font=font)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
105 draw.text((sx1+(sx2-sx1)/2-(tox/2), spacerY2+toy/2), txt, font=font, fill='#ffffff')
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
106
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
107 # last bottle spacer
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
108 circ(draw, x, r2, dn, 0.5)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
109
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
110 def getimage(args):
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
111 image = Image.new('1', (1000, 250)) #create new image, 1000x500 pixels, 1 bit per pixel
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
112 draw = ImageDraw.Draw(image)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
113 draw_bottles(draw, args)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
114 return image
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
115
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
116 if __name__ == "__main__":
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
117 parser = argparse.ArgumentParser(description="Calculate spacer pipes for pressure cylinder transport\n" +
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
118 "Known cylinder types:\n" + ", ".join(sorted(CYLINDER.keys())) )
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
119 parser.add_argument('cylinders', metavar='cylinder', type=str, nargs='+',
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
120 help='cylinder types')
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
121 parser.add_argument('--space', dest='space_min', type=int,
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
122 default=SPACE_MIN,
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
123 help='minimum space between cylinders (mm)')
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
124
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
125 args = parser.parse_args()
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
126
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
127 for test in args.cylinders:
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
128 if not test in CYLINDER.keys():
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
129 print "Cylinder type '%s' is unknown" % test
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
130 sys.exit(1)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
131
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
132 image = getimage(args)
007bbb709982 cylinder transport spacer calculation
mdd
parents:
diff changeset
133 image.show()

mercurial