chiark / gitweb /
helixish: make railway basis right-handed
[moebius3.git] / moedebug.py
1
2 from __future__ import print_function
3
4 import moenp
5
6 _files = []
7
8 def dbg_file(f):
9   _files.append(f)
10
11 def dbg_enabled():
12   return not not _files
13
14 def dbg(*args):
15   for f in _files:
16     s = ' '.join(map(str,args))
17     for l in s.split('\n'):
18       print('// D ', l, file=f)
19     f.flush()
20
21 class BaseVisdebug():
22   def line(vd, p0, p1, **kw):
23     vd.curve(lambda t: p0 + t * (p1-p0), **kw)
24   def arrow(vd, p, d, **kw):
25     vd.line(p, p+d, **kw)
26   def basis(vd, basis, hue=(1,1,1)):
27     for ax in range(0,3):
28       vd.arrow(basis[0:3,3], basis[0:3,ax],
29                color= tuple([ c * (1.0 - ax*0.25) for c in hue ]))
30
31 class NullVisdebug():
32   def curve(*a, **kw): pass
33   def line(*a, **kw): pass
34   def arrow(*a, **kw): pass
35   def basis(*a, **kw): pass
36   def crashing(*a, **kw): pass
37
38 class MatrixVisdebug(BaseVisdebug):
39   def __init__(m, base, matrix):
40     m._b = base
41     m._matrix = matrix
42   def curve(m, fn, **kw):
43     m._b.curve(lambda t: moenp.augmatmultiply(m._matrix, fn(t)), **kw)
44   def arrow(m, p, d, **kw):
45     m._b.arrow(moenp.augmatmultiply(m._matrix, p),
46                moenp.augmatmultiply(m._matrix, d, 0),
47                **kw)
48   def crashing(m, *a, **kw): m._b.crashing(*a, **kw)
49
50 _nullvis = NullVisdebug()
51 _vis = [ _nullvis ]
52
53 def vdbg():
54   return _vis[0]
55
56 def vdbg_enabled():
57   return _vis[0] != _nullvis
58
59 def vdbg_enable(vis):
60   _vis[0] = vis