chiark / gitweb /
3aca0f9f99a9b3c3ac5df26f0b806816bce1b545
[moebius3.git] / scad.py
1
2 from __future__ import print_function
3
4 class ScadObject:
5   def __init__(so):
6     so._points = []
7     so._point_indices = {}
8     so._triangles = []
9
10   def writeout_core(so, scalefactor=1):
11     print('scale(%s) polyhedron(points=[' % scalefactor)
12     for p in so._points: print(p, ',')
13     print('],faces=[')
14     for t in so._triangles: print(repr(t), ',')
15     so._points = None
16     print('],convexity=10);')
17
18   def writeout(so, objname, scalefactor=1):
19     print('module %s(){' % objname)
20     so.writeout_core(scalefactor)
21     print('}')
22
23   def _point(so, p):
24     l = list(p)
25     s = repr(l)
26     try:
27       ix = so._point_indices[s]
28     except KeyError:
29       ix = len(so._points)
30       so._points.append(s)
31       so._point_indices[s] = ix
32     return ix
33
34   def triangle(so, a,b,c):
35     ''' a b c  are clockwise from inside '''
36     so._triangles.append([ so._point(p) for p in (a,b,c) ])
37
38   def quad(so, cnrs):
39     ''' cnrs[0] [1] [3] [2] are clockwise from inside '''
40     so.triangle(cnrs[0], cnrs[1], cnrs[3])
41     so.triangle(cnrs[0], cnrs[3], cnrs[2])
42
43   def rquad(so, cnrs):
44     ''' cnrs[0] [1] [3] [2] are anticlockwise from inside '''
45     so.triangle(cnrs[0], cnrs[3], cnrs[1])
46     so.triangle(cnrs[0], cnrs[2], cnrs[3])
47