chiark / gitweb /
helixish: try three paths
[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 circle(*a, **kw): pass
35   def arrow(*a, **kw): pass
36   def basis(*a, **kw): pass
37   def crashing(*a, **kw): pass
38
39 class MatrixVisdebug(BaseVisdebug):
40   def __init__(m, base, matrix):
41     m._b = base
42     m._matrix = matrix
43   def curve(m, fn, **kw):
44     m._b.curve(lambda t: moenp.augmatmultiply(m._matrix, fn(t)), **kw)
45   def circle(m, c, axis, **kw):
46     m._b.circle(moenp.augmatmultiply(m._matrix, c),
47                 moenp.augmatmultiply(m._matrix, axis, 0),
48                 **kw)
49   def arrow(m, p, d, **kw):
50     m._b.arrow(moenp.augmatmultiply(m._matrix, p),
51                moenp.augmatmultiply(m._matrix, d, 0),
52                **kw)
53   def crashing(m, *a, **kw): m._b.crashing(*a, **kw)
54
55 _nullvis = NullVisdebug()
56 _vis = [ _nullvis ]
57
58 def vdbg():
59   return _vis[0]
60
61 def vdbg_enabled():
62   return _vis[0] != _nullvis
63
64 def vdbg_enable(vis):
65   _vis[0] = vis