#!/usr/bin/python from __future__ import print_function import signal signal.signal(signal.SIGINT, signal.SIG_DFL) from moebius import * nomsize = 20 thick = 1.0 nv = 80 nw = 80 m = Moebius(nv, nw) 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]) relthick = thick/(nomsize*2) def make_moebius(objname): so = ScadObject() for v in range(0, nv): for w in range(0, nw): so.quad([ m.point_offset(v+a, w+b, relthick) for a in (0, 1) for b in (0, 1) ]) so.rquad([ m.point_offset(v+a, w+b, -relthick) for a in (1, 0) for b in (1, 0) ]) for q, w in ((so.quad, 0), (so.rquad, nw)): q([ m.point_offset(v+a, w, b*relthick) for a in (0, 1) for b in (-1, +1) ]) so.writeout(objname, nomsize) make_moebius('MoebiusCore') print('moebiuscore_nomsize=%s;' % repr(nomsize))