chiark / gitweb /
simplex wip: use gsl_vector_get for X, for abandonment
[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 def vec2dbg(v): return '[%6.3f %6.3f %6.3f]' % tuple(v)
22
23 class BaseVisdebug():
24   def line(vd, p0, p1, **kw):
25     vd.curve(lambda t: p0 + t * (p1-p0), **kw)
26   def arrow(vd, p, d, **kw):
27     vd.line(p, p+d, **kw)
28   def basis(vd, basis, hue=(1,1,1)):
29     for ax in range(0,3):
30       vd.arrow(basis[0:3,3], basis[0:3,ax],
31                color= tuple([ c * (1.0 - ax*0.25) for c in hue ]))
32
33 class NullVisdebug():
34   def curve(*a, **kw): pass
35   def line(*a, **kw): pass
36   def circle(*a, **kw): pass
37   def arrow(*a, **kw): pass
38   def basis(*a, **kw): pass
39   def crashing(*a, **kw): pass
40
41 class MatrixVisdebug(BaseVisdebug):
42   def __init__(m, base, matrix):
43     m._b = base
44     m._matrix = matrix
45   def curve(m, fn, **kw):
46     m._b.curve(lambda t: moenp.augmatmultiply(m._matrix, fn(t)), **kw)
47   def circle(m, c, axis, **kw):
48     m._b.circle(moenp.augmatmultiply(m._matrix, c),
49                 moenp.augmatmultiply(m._matrix, axis, 0),
50                 **kw)
51   def arrow(m, p, d, **kw):
52     m._b.arrow(moenp.augmatmultiply(m._matrix, p),
53                moenp.augmatmultiply(m._matrix, d, 0),
54                **kw)
55   def crashing(m, *a, **kw): m._b.crashing(*a, **kw)
56
57 _nullvis = NullVisdebug()
58 _vis = [ _nullvis ]
59
60 def vdbg():
61   return _vis[0]
62
63 def vdbg_enabled():
64   return _vis[0] != _nullvis
65
66 def vdbg_enable(vis):
67   _vis[0] = vis