cylindertransport.py

changeset 2
9ec8fa3d0348
parent 1
14a420653a5f
child 3
d8745f771267
equal deleted inserted replaced
1:14a420653a5f 2:9ec8fa3d0348
1 from math import sqrt 1 from math import sqrt
2 from PIL import Image, ImageDraw, ImageFont 2 from PIL import Image, ImageDraw, ImageFont
3 import argparse, sys 3 import argparse, sys
4 from data import CYLINDER, PIPES
5 from config import FONTBASE
4 6
5 # pfad zu den TTF files (arial.ttf) 7 SCADSCRIPT = "// Color support only in compile mode (F5)\ninclude <cylindertransport.scad>\n"
6 FONTBASE = "/usr/share/fonts/truetype/msttcorefonts/"
7
8 SPACE_MIN = 10 # minimum offset between bottles
9
10 SCADSCRIPT = "include <cylindertransport.scad>\n"
11
12 # Durchmesser, Laenge, Volumen und Gewicht der verfuegbaren Tauchflaschen
13 CYLINDER = {
14 "03" : [100, 515, 3, 4.7],
15 "05" : [140, 466, 5, 5.7],
16 "07" : [140, 605, 7, 8.8],
17 "08" : [171, 490, 8, 10.4],
18 "10" : [171, 595, 10, 12.4],
19 "12S" : [204, 550, 12, 15.4],
20 "12L" : [171, 690, 12, 14.5],
21 "15" : [204, 640, 15, 18.1],
22 }
23
24 PIPES = [
25 ["DN8", 13.5],
26 ["DN10", 17.2],
27 ["DN15", 21.3],
28 ["DN20", 26.9],
29 ["DN25", 33.7],
30 ["DN32", 42.4],
31 ["DN40", 48.3],
32 ["DN50", 60.3],
33 ["DN65", 76.1],
34 ["DN80", 88.9],
35 ["DN100", 114.3],
36 ["DN125", 139.7],
37 ["DN150", 168.3],
38 ]
39 8
40 def offset(r1, r2): 9 def offset(r1, r2):
41 o = (2*sqrt(r1*r2)) 10 return (2*sqrt(r1*r2))
42 #print "offset %i" % o
43 return o
44 11
45 def calc_min(r1, r2): 12 def calc_min(r1, r2, space_min):
46 # stupider annaehreungsversuch, bis sich die beiden Tauchflaschen r1 und r2 nicht mehr beruehren 13 # stupider annaehreungsversuch, bis sich die beiden Tauchflaschen r1 und r2 nicht mehr beruehren
47 #print "r1=%.0f r2=%.0f" % (r1, r2)
48 for p in PIPES: 14 for p in PIPES:
49 i = p[1] / 2 15 i = p[1] / 2
50 if i>r1 or i>r2: 16 if i>r1 or i>r2:
51 print "spacer radius > r1 or r2, abort" 17 print "spacer radius > r1 or r2, abort"
52 return None 18 return None
53 x1 = offset(r1, i) 19 x1 = offset(r1, i)
54 x2 = offset(r2, i) 20 x2 = offset(r2, i)
55 x = (x1 + x2) - (r1+r2) 21 x = (x1 + x2) - (r1+r2)
56 if x >= SPACE_MIN: 22 if x >= space_min:
57 print "%s Pipe (%.1fmm), Cylinder spacing: %imm" % (p[0], p[1], x) 23 print "%s Pipe (%.1fmm), Cylinder spacing: %imm" % (p[0], p[1], x)
58 return [r1, i, r2, p[0]] 24 return [r1, i, r2, p[0]]
59 return None 25 return None
60 26
61 def circ(draw, x, r, txt = "", txtfactor = 1.0): 27 def circ(draw, x, r, txt = "", txtfactor = 1.0):
67 33
68 34
69 def draw_bottles(draw, args): 35 def draw_bottles(draw, args):
70 global SCADSCRIPT 36 global SCADSCRIPT
71 bottles = args.cylinders 37 bottles = args.cylinders
72 SPACE_MIN = args.space_min
73 38
74 spacerY1 = 200 39 spacerY1 = 200
75 spacerY2 = 220 40 spacerY2 = 220
76 # first bottle spacer 41 # first bottle spacer
77 r1 = CYLINDER[bottles[0]][0] / 2 42 r1 = CYLINDER[bottles[0]][0] / 2
78 r2 = CYLINDER[bottles[1]][0] / 2 43 r2 = CYLINDER[bottles[1]][0] / 2
79 x = 20 + r1 # start offset x 44 x = 20 + r1 # start offset x
80 r1, r2, r3, dn = calc_min(r1, r2) 45 r1, r2, r3, dn = calc_min(r1, r2, args.space_min)
81 circ(draw, x, r2, dn, 0.5) 46 circ(draw, x, r2, dn, 0.5)
82 SCADSCRIPT = SCADSCRIPT + "spacer(%i, %i, %i, %i);\n" % ( 47 SCADSCRIPT = SCADSCRIPT + "spacer(%i, %i, %i, %i);\n" % (
83 x, r2, r3, CYLINDER[bottles[0]][1]) 48 x, r2, r3, CYLINDER[bottles[0]][1])
84 x = x + offset(r2, r3) 49 x = x + offset(r2, r3)
85 50
86 for i in range(0, len(bottles)-1): 51 for i in range(0, len(bottles)-1):
87 r1 = CYLINDER[bottles[i]][0] / 2 52 r1 = CYLINDER[bottles[i]][0] / 2
88 r2 = CYLINDER[bottles[i+1]][0] / 2 53 r2 = CYLINDER[bottles[i+1]][0] / 2
89 r1, r2, r3, dn = calc_min(r1, r2) 54 r1, r2, r3, dn = calc_min(r1, r2, args.space_min)
90 # draw bottle 55 # draw bottle
91 circ(draw, x, r1, "Tank "+bottles[i]) 56 circ(draw, x, r1, "Tank "+bottles[i])
92 SCADSCRIPT = SCADSCRIPT + "tank(%i, %i, %i);\n" % ( 57 SCADSCRIPT = SCADSCRIPT + "tank(%i, %i, %i);\n" % (
93 x, r1, CYLINDER[bottles[i]][1]) 58 x, r1, CYLINDER[bottles[i]][1])
94 sx1 = x+r1 59 sx1 = x+r1
128 parser = argparse.ArgumentParser(description="Calculate spacer pipes for pressure cylinder transport\n" + 93 parser = argparse.ArgumentParser(description="Calculate spacer pipes for pressure cylinder transport\n" +
129 "Known cylinder types:\n" + ", ".join(sorted(CYLINDER.keys())) ) 94 "Known cylinder types:\n" + ", ".join(sorted(CYLINDER.keys())) )
130 parser.add_argument('cylinders', metavar='cylinder', type=str, nargs='+', 95 parser.add_argument('cylinders', metavar='cylinder', type=str, nargs='+',
131 help='cylinder types') 96 help='cylinder types')
132 parser.add_argument('--space', dest='space_min', type=int, 97 parser.add_argument('--space', dest='space_min', type=int,
133 default=SPACE_MIN, 98 default=10,
134 help='minimum space between cylinders (mm)') 99 help='minimum space between cylinders (mm)')
135 100
136 args = parser.parse_args() 101 args = parser.parse_args()
137 102
138 for test in args.cylinders: 103 for test in args.cylinders:

mercurial