stl.py

changeset 9
a01a3fd32073
child 10
d26669bf424e
equal deleted inserted replaced
8:63b6f80e09ef 9:a01a3fd32073
1 import data, os, config, subprocess
2
3 OPENSCAD_MODULES = """
4 module tank(x, r, h) {
5 color("SteelBlue") render() { //rotate([90,0,0]) {
6 translate([x, r, r]) {
7 sphere(r = r); // bottom
8 cylinder(h = h-2*r, r = r);
9 }
10 translate([x, r, h-r]) {
11 sphere(r = r); // top
12 cylinder(h = r*1.4, r = r*0.25);
13 }
14 }
15 }
16
17 module spacer(x, r, rcyl, h) {
18 color("DarkGrey") render() { //rotate([90,0,0]) {
19 translate([x, r, rcyl]) {
20 difference() {
21 cylinder(h = h-2*rcyl, r = r);
22 cylinder(h = h-2*rcyl, r = r*0.8);
23 }
24 }
25 }
26 }
27 $fn = 25; // high detail per default
28 """
29
30 def run_openscad(output):
31 if os.path.isfile(output):
32 print "skipping existing file %s" % output
33 return
34 print "rendering %s" % output
35 subprocess.check_call([
36 'openscad',
37 '-o',
38 output,
39 config.TMP_SCAD
40 ])
41
42 def precompile_all_stl():
43 base = os.path.abspath('stl')
44 hmin = 9999
45 rmax = 0
46 for cyl in data.CYLINDER.keys():
47 with open(config.TMP_SCAD, "w") as fn:
48 fn.write(OPENSCAD_MODULES)
49 fn.write("tank(0, %f, %f);" % (
50 data.CYLINDER[cyl][0] / 2 * config.SCALE3D,
51 data.CYLINDER[cyl][1] * config.SCALE3D))
52 run_openscad(os.path.join(base,
53 'cylinder_' + cyl + '.stl'))
54 if data.CYLINDER[cyl][1] < hmin:
55 hmin = data.CYLINDER[cyl][1]
56 if data.CYLINDER[cyl][0] > rmax:
57 rmax = data.CYLINDER[cyl][0]
58
59 for pipe in data.PIPES:
60 with open(config.TMP_SCAD, "w") as fn:
61 fn.write(OPENSCAD_MODULES)
62 fn.write("spacer(0, %f, %f, %f);" % (
63 pipe[1] / 2 * config.SCALE3D,
64 rmax / 2 * config.SCALE3D,
65 hmin * config.SCALE3D))
66 run_openscad(os.path.join(base,
67 'spacer_' + pipe[0] + '.stl'))
68

mercurial