chiark / gitweb /
mesh: generates somethinng visible, but it is wrong
[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 = 5
16 kw = 5
17
18 # resolution
19 nv = 20
20 nw = 20
21 ns = 3 # around tube
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 '%4f %4f %4f' % 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 v in range(0,nv) ] # along extents
40   travers = [ ScadObject() for w in range(0,nw) ] # along traverses
41
42   def qc(v, w, sigmas, 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_trav, w + ab*(not is_trav))
46       for sx in 0,1:
47         sigma = sigmas[sx]
48         if is_trav: acrs = extt
49         else: acrs = trav
50         delta = norm * sin(sigma) + acrs * cos(sigma)
51         r = p + wire/nomsize * delta
52         print(' RW,ab,sx',ab,sx,
53               'r=',dpr(r),
54               'p=',dpr(p),
55               'norm=',dpr(norm),
56               'extt=',dpr(extt),
57               'acrs=',dpr(acrs),
58               'delta=',dpr(delta),
59               's=','%4f' % sigma,
60               file=sys.stderr)
61         yield r
62
63   for v in range(0, nv):
64     for w in range(0, nw):
65       for s in range(0, ns):
66         sigmas = [ (s + sx + 1.0)/ns * tau for sx in 0,1 ]
67         print('VWS',v,w,s, sigmas, file=sys.stderr)
68         if not w % each_w:
69           extents[w].quad([ cnr for cnr in qc(v,w,sigmas,False) ])
70         if False and not v % each_v:
71           travers[v].quad([ round_wire(p, norm, extt, sigmas[sx])
72                             for b in 0,1
73                             for p, norm, extt, trav in (m.details(v, w+b),)
74                             for sx in 0,1 ])
75   for v in range(0, nv):
76     print('// extent v=', v)
77     extents[v].writeout_core(nomsize)
78   for w in range(0, nw):
79     print('// travers w=', w)
80     travers[w].writeout_core(nomsize)
81   print('}')
82
83 make_moebius('MoebiusMesh')
84 print('moebiuscore_nomsize=%s;' % repr(nomsize))