chiark / gitweb /
mesh: introduce is_extt (nfc)
[moebius3.git] / meshscad
1 #!/usr/bin/python
2
3 from __future__ import print_function
4
5 import signal
6 signal.signal(signal.SIGINT, signal.SIG_DFL)
7
8 from moebius import *
9 from scad import *
10
11 nomsize = 50;
12 wire = 3.0;
13
14 # number of wires
15 kv = 24
16 kw = 16
17
18 # resolution
19 nv = 80
20 nw = 80
21 ns = 4 # around tube, should be even
22
23 nv += -nv % kv
24 nw += -nw % kw
25
26 each_v = nv / kv
27 each_w = nw / kw
28
29 m = Moebius(nv, nw)
30
31 def dpr(v): return '%+3f %+3f %+3f' % tuple(v)
32
33 def round_wire(p, vec_surfacenormal, vec_acrosswire, sigma):
34   return r
35
36 def make_moebius(objname):
37   print('module %s(){' % objname)
38   # wires:
39   extents = [ ScadObject() for w in range(0,nw) ] # along extents
40   travers = [ ScadObject() for v in range(0,nv) ] # along traverses
41
42   def qc(v, w, sigmas, is_extt, is_trav):
43     #print(' QCv,w,T',v,w,is_trav, file=sys.stderr)
44     for ab in 0,1:
45       p, norm, extt, trav = m.details(v + ab*is_extt, w + ab*is_trav)
46       for sx in 0,1:
47         sigma = sigmas[sx]
48         if is_trav: acrs = extt
49         elif is_extt: acrs = trav
50         else: pass
51         delta = norm * sin(sigma) + acrs * cos(sigma)
52         r = p + wire/nomsize * delta
53         #print(' RW,ab,sx',ab,sx,
54         #      'r=',dpr(r),
55         #      'p=',dpr(p),
56         #      'norm=',dpr(norm),
57         #      'extt=',dpr(extt),
58         #      'acrs=',dpr(acrs),
59         #      'delta=',dpr(delta),
60         #      's=','%4f' % sigma,
61         #      file=sys.stderr)
62         yield r
63
64   for v in range(0, nv):
65     for w in range(0, nw+1):
66       for s in range(0, ns):
67         sigmas = [ (s + sx + 0.5)/ns * tau for sx in 0,1 ]
68         #print('VWS',v,w,s, sigmas, file=sys.stderr)
69         if not w % each_w:
70           extents[w % nw].quad([ cnr for cnr in qc(v,w,sigmas,True,False) ])
71         if not v % each_v and w < nw:
72           travers[v].quad([ cnr for cnr in qc(v,w,sigmas,False,True) ])
73   for w in range(0, nw):
74     print('// extent w=', w)
75     extents[w].writeout_core(nomsize)
76   for v in range(0, nv):
77     print('// travers v=', v)
78     travers[v].writeout_core(nomsize)
79   print('}')
80
81 make_moebius('MoebiusMesh')
82 print('moebiuscore_nomsize=%s;' % repr(nomsize))