# HG changeset patch # User mdd # Date 1491346785 -7200 # Node ID ba3d8c56e6f53586529fb275bf3a74806fe259dd # Parent 39fb313ba27c689f4074f6ced0c1b00aa84e78a5 code cleanup diff -r 39fb313ba27c -r ba3d8c56e6f5 cylindertransport-web.py --- a/cylindertransport-web.py Wed Apr 05 00:39:31 2017 +0200 +++ b/cylindertransport-web.py Wed Apr 05 00:59:45 2017 +0200 @@ -1,16 +1,22 @@ #!/usr/bin/env python # -*- coding: UTF-8 -*- +""" +Web CGI script for 3D View +""" import cgi, data, json, config from cylindertransport import CylinderSpacerCalculator # enable debugging -import cgitb, sys -sys.stderr = sys.stdout +#import sys +#sys.stderr = sys.stdout +#import cgitb #cgitb.enable() - def do_action(args): + """ + process some actions (like JSON requests) + """ if args["action"].value == "calculate": cylinders = args.getlist("cylinders[]") calc = CylinderSpacerCalculator(cylinders) @@ -22,24 +28,26 @@ else: print "unknown Action %s" % args["action"].value - - - - - -print("Content-Type: text/html;charset=utf-8") -print("") +def run(): + """ + Main program, without action displays the html content + """ + print "Content-Type: text/html;charset=utf-8" + print "" -args = cgi.FieldStorage() -if "action" in args: - do_action(args) -else: - # display the html content - content = open("stlviewer.html", "r").read() - cyls = "" - for cyl in sorted(data.CYLINDER.keys()): - cyls += "
  • %s
  • " % ( - cyl, data.CYLINDER[cyl][3], data.CYLINDER[cyl][4]); - content = content.replace("", cyls) + args = cgi.FieldStorage() + if "action" in args: + do_action(args) + else: + # display the html content + content = open("stlviewer.html", "r").read() + cyls = "" + for cyl in sorted(data.CYLINDER.keys()): + cyls += "
  • %s
  • " % ( + cyl, data.CYLINDER[cyl][3], data.CYLINDER[cyl][4]) + content = content.replace("", cyls) - print content + print content + +if __name__ == "__main__": + run() diff -r 39fb313ba27c -r ba3d8c56e6f5 cylindertransport.py --- a/cylindertransport.py Wed Apr 05 00:39:31 2017 +0200 +++ b/cylindertransport.py Wed Apr 05 00:59:45 2017 +0200 @@ -58,7 +58,7 @@ print "// Abort: no suitable pipe found" sys.exit(1) - def _circle(self, posx, radius, data, cylinder = ""): + def _circle(self, posx, radius, data, cylinder=""): """ Push the circle definition for later rendering """ @@ -92,7 +92,7 @@ r_2 = CYLINDER[self.cylinders[i+1]][0] / 2 r_1, r_2, r_3, data = self.calc_min(r_1, r_2) # draw cylinder - self._circle(posx, r_1, + self._circle(posx, r_1, \ CYLINDER[self.cylinders[i]], self.cylinders[i]) self.scad["cylinder"] += "tank(%f, %f, %f);\n" % ( posx * SCALE3D, r_1 * SCALE3D, @@ -108,7 +108,7 @@ sx2 = posx - r_3 if i == (len(self.cylinders) - 2): # draw last bottle - self._circle(posx, r_3, + self._circle(posx, r_3, \ CYLINDER[self.cylinders[i + 1]], self.cylinders[i + 1]) self.scad["cylinder"] += "tank(%f, %f, %f);\n" % ( posx * SCALE3D, r_3 * SCALE3D, @@ -194,11 +194,12 @@ img = worker.render_image() img.show() - if (options.scad != ""): + if options.scad != "": with open(options.scad, "w") as fd: fd.write(worker.scad["tmpl"]) + # center the object fd.write("translate([%f,0,0]) {\n" % ( - ((worker.width - 2 * worker.margin) / -2) * SCALE3D)) # center the object + ((worker.width - 2 * worker.margin) / -2) * SCALE3D)) fd.write(worker.scad["cylinder"]) fd.write(worker.scad["spacer"]) fd.write("}\n") diff -r 39fb313ba27c -r ba3d8c56e6f5 stl.py --- a/stl.py Wed Apr 05 00:39:31 2017 +0200 +++ b/stl.py Wed Apr 05 00:59:45 2017 +0200 @@ -1,5 +1,9 @@ -import data, os, config, subprocess -import vtk +""" +STL related helpers +""" + +import os, subprocess, vtk +import config, data OPENSCAD_MODULES = """ module tank(x, r, h) { @@ -29,6 +33,9 @@ """ def run_openscad(output): + """ + Run openSCAD process, then convert the ascii stl to binary by using vtk + """ if os.path.isfile(output): print "skipping existing file %s" % output return @@ -47,9 +54,14 @@ write.SetFileTypeToBinary() write.SetInput(reader.GetOutput()) write.SetFileName(output) - write.Write() + write.Write() def precompile_all_stl(): + """ + Write .scad temp file and + Invoke run_openscad for each object + that needs to be created in stl directory + """ base = os.path.abspath('stl') hmin = 9999 rmax = 0 @@ -59,7 +71,7 @@ fn.write("tank(0, %f, %f);" % ( data.CYLINDER[cyl][0] / 2 * config.SCALE3D, data.CYLINDER[cyl][1] * config.SCALE3D)) - run_openscad(os.path.join(base, + run_openscad(os.path.join(base, \ 'cylinder_' + cyl + '.stl')) if data.CYLINDER[cyl][1] < hmin: hmin = data.CYLINDER[cyl][1] @@ -73,6 +85,6 @@ pipe[1] / 2 * config.SCALE3D, rmax / 2 * config.SCALE3D, hmin * config.SCALE3D)) - run_openscad(os.path.join(base, + run_openscad(os.path.join(base, \ 'spacer_' + pipe[0] + '.stl')) diff -r 39fb313ba27c -r ba3d8c56e6f5 stlviewer.html --- a/stlviewer.html Wed Apr 05 00:39:31 2017 +0200 +++ b/stlviewer.html Wed Apr 05 00:59:45 2017 +0200 @@ -60,7 +60,7 @@ init(); animate(); -
    + \ No newline at end of file