-
-class ScadObject:
- def __init__(so):
- so._points = []
- so._point_indices = {}
- so._triangles = []
-
- def writeout(so, objname, scalefactor=1):
- print('module %s(){ scale(%s) polyhedron(points=[' %
- (objname, scalefactor))
- for p in so._points: print(p, ',')
- print('],faces=[')
- for t in so._triangles: print(repr(t), ',')
- print('],convexity=10); }')
- so._points = None
-
- def _point(so, p):
- l = list(p)
- s = repr(l)
- try:
- ix = so._point_indices[s]
- except KeyError:
- ix = len(so._points)
- so._points.append(s)
- so._point_indices[s] = ix
- return ix
-
- def triangle(so, a,b,c):
- ''' a b c are clockwise from inside '''
- so._triangles.append([ so._point(p) for p in (a,b,c) ])
-
- def quad(so, cnrs):
- ''' cnrs[0] [1] [3] [2] are clockwise from inside '''
- so.triangle(cnrs[0], cnrs[1], cnrs[3])
- so.triangle(cnrs[0], cnrs[3], cnrs[2])
-
- def rquad(so, cnrs):
- ''' cnrs[0] [1] [3] [2] are anticlockwise from inside '''
- so.triangle(cnrs[0], cnrs[3], cnrs[1])
- so.triangle(cnrs[0], cnrs[2], cnrs[3])
-