import symbolic
class OptimisedCurve():
+ counter = 0
+
+ def _dbg(oc, s):
+ dbg('OC#%04d %s' % (oc._counter, s))
+
def __init__(oc, cp, nt):
+ oc._counter = OptimisedCurve.counter
+ OptimisedCurve.counter += 1
+ oc._dbg('cp= ' + ' '.join(map(vec2dbg, cp)))
+
db = DiscreteBezier(cp, nt, bezier_constructor=BezierSegment)
fc_input = map(db.point_at_it, range(0, nt+1))
- dbg(repr(fc_input))
+ oc._dbg(repr(fc_input))
for end in (False,True):
ei = nt if end else 0
ef_dirn = unit_v(cp[cp1i] - cp[cp0i])
ef_len = np.linalg.norm(np.array(fc_input[fi]) - np.array(fc_input[ei]))
f = e + ef_dirn * ef_len
- dbg(repr((end, e,f, ef_dirn, ef_len)))
+ oc._dbg(repr((end, e,f, ef_dirn, ef_len)))
fc_input[ei] = e
fc_input[fi] = f
- dbg(repr(fc_input))
+ oc._dbg(repr(fc_input))
findcurve_epsilon = 0.01
cl = ['./findcurve', '%d' % (nt+1), '%.18g' % findcurve_epsilon]
- dbg('STARTING FINDCURVE %s' % cl)
+ oc._dbg('STARTING FINDCURVE %s' % cl)
subproc = subprocess.Popen(
cl,
bufsize=1,
universal_newlines=True,
)
- dbg('RUNNING FINDCURVE')
+ oc._dbg('RUNNING FINDCURVE')
fc_input = np.hstack(fc_input)
s = ' '.join(map(str, fc_input))
- dbg(('>> %s' % s))
+ oc._dbg(('>> %s' % s))
print(s, file=subproc.stdin)
subproc.stdin.flush()
subproc = oc.subproc
if subproc is None: return
- dbg('(awaiting)')
+ oc._dbg('(awaiting)')
commentary = ''
while True:
l = subproc.stdout.readline()
l = l.rstrip()
- dbg('<< ', l)
+ oc._dbg('<< ' + l)
if not l: vdbg().crashing('findcurve EOF')
if not l.startswith('['):
commentary += ' '
l = eval(l)
if not l: break
- dbg('[%s] %s' % (l, commentary))
+ oc._dbg('[%s] %s' % (l, commentary))
commentary = ''
findcurve_result = l
oc.subproc = None
oc._result = np.reshape(findcurve_result, (-1,3), 'C')
- dbg(repr(oc._result))
+ oc._dbg(repr(oc._result))
vdbg().curve( oc.point_at_t )
def point_at_it(oc, it):
oc._await_subproc()
- dbg(repr((it,)))
+ oc._dbg(repr((it,)))
return oc._result[it]
def point_at_t(oc, t):