From ba4d63ea1cde4de040787f42b723b6f93e1c0a8b Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 20 Feb 2017 17:43:38 -0600 Subject: [PATCH] [symfont] Fixup for 1fe8d9f0d149d571626dd3f9121953fd71ebcc2c --- Snippets/symfont.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Snippets/symfont.py b/Snippets/symfont.py index 9271301f2..2f1fc2b3a 100755 --- a/Snippets/symfont.py +++ b/Snippets/symfont.py @@ -14,7 +14,9 @@ n = 3 # Max Bezier degree; 3 for cubic, 2 for quadratic t, x, y = sp.symbols('t x y', real=True) c = sp.symbols('c', real=False) # Complex representation instead of x/y -P = tuple(zip(*(sp.symbols('P:%d[%s]'%(n+1,w), real=True) for w in '01'))) +X = tuple(sp.symbols('x:%d'%(n+1), real=True)) +Y = tuple(sp.symbols('y:%d'%(n+1), real=True)) +P = tuple(zip(*(sp.symbols('p:%d[%s]'%(n+1,w), real=True) for w in '01'))) C = tuple(sp.symbols('c:%d'%(n+1), real=False)) # Cubic Bernstein basis functions @@ -98,7 +100,9 @@ class %s(BasePen): x2,y2 = p2 x3,y3 = p3 ''', file=file) - defs, exprs = sp.cse([green(f, BezierCurve[n]) for name,f in funcs], + subs = {P[i][j]: [X, Y][j][i] for i in range(n+1) for j in range(2)} + greens = [green(f, BezierCurve[n]).subs(subs) for name,f in funcs] + defs, exprs = sp.cse(greens, optimizations='basic', symbols=(sp.Symbol('r%d'%i) for i in count())) for name,value in defs: @@ -123,7 +127,7 @@ class BezierFuncs(dict): self._bezfuncs = {} def __missing__(self, i): - args = ['P%d'%d for d in range(i+1)] + args = ['p%d'%d for d in range(i+1)] return sp.lambdify(args, green(self._symfunc, BezierCurve[i])) class GreenPen(BasePen):