[symfont] Speed up a bit
Remove one level of indirection in access to point data in generated functions; ie. use p0, p1, ... instead of P[0], P[1], ... Makes for about 10% speedup.
This commit is contained in:
parent
cde56fce66
commit
7fd9dce0e9
@ -24,7 +24,7 @@ n = 3 # Max Bezier degree; 3 for cubic, 2 for quadratic
|
||||
|
||||
t, x, y = sp.symbols('t x y', real=True)
|
||||
|
||||
P = tuple(sp.symbols('P[:%d][:2]' % (n+1), real=True))
|
||||
P = tuple(sp.symbols('p:%d[:2]' % (n+1), real=True))
|
||||
P = tuple(P[2*i:2*(i+1)] for i in range(len(P) // 2))
|
||||
|
||||
# Cubic Bernstein basis functions
|
||||
@ -57,7 +57,8 @@ class BezierFuncs(object):
|
||||
|
||||
def __getitem__(self, i):
|
||||
if i not in self._bezfuncs:
|
||||
self._bezfuncs[i] = sp.lambdify('P', green(self._symfunc, Bezier=BezierCurve[i]))
|
||||
args = ['p%d'%d for d in range(i+1)]
|
||||
self._bezfuncs[i] = sp.lambdify(args, green(self._symfunc, Bezier=BezierCurve[i]))
|
||||
return self._bezfuncs[i]
|
||||
|
||||
_BezierFuncs = {}
|
||||
@ -88,21 +89,21 @@ class GreenPen(BasePen):
|
||||
|
||||
def _lineTo(self, p1):
|
||||
p0 = self._getCurrentPoint()
|
||||
self.value += self._funcs[1]((p0,p1))
|
||||
self.value += self._funcs[1](p0,p1)
|
||||
|
||||
def _qCurveToOne(self, p1, p2):
|
||||
p0 = self._getCurrentPoint()
|
||||
self.value += self._funcs[2]((p0,p1,p2))
|
||||
self.value += self._funcs[2](p0,p1,p2)
|
||||
|
||||
def _curveToOne(self, p1, p2, p3):
|
||||
p0 = self._getCurrentPoint()
|
||||
self.value += self._funcs[3]((p0,p1,p2,p3))
|
||||
self.value += self._funcs[3](p0,p1,p2,p3)
|
||||
|
||||
def _closePath(self):
|
||||
p0 = self._getCurrentPoint()
|
||||
if p0 != self.__startPoint:
|
||||
p1 = self.__startPoint
|
||||
self.value += self._funcs[1]((p0,p1))
|
||||
self.value += self._funcs[1](p0,p1)
|
||||
|
||||
#AreaPen = partial(GreenPen, func=1)
|
||||
Moment1XPen = partial(GreenPen, func=x)
|
||||
|
Loading…
x
Reference in New Issue
Block a user