From c935118072ecc029e38d718701a415048f859a6c Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 20 Feb 2017 19:22:51 -0600 Subject: [PATCH] [interpolatable] Add TeePen Used to combine StatisticsPen and PerimeterPen into one pen for example. Though, that example to be removed again. --- Snippets/interpolatable.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/Snippets/interpolatable.py b/Snippets/interpolatable.py index 2e30e9754..45645b049 100755 --- a/Snippets/interpolatable.py +++ b/Snippets/interpolatable.py @@ -9,6 +9,7 @@ from __future__ import print_function, division, absolute_import from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen +from fontTools.pens.perimeterPen import PerimeterPen from fontTools.pens.statisticsPen import StatisticsPen import itertools @@ -75,6 +76,34 @@ class RecordingPen(RecordingNoComponentsPen): self.value.append(('addComponent', (glyphName, transformation))) +class TeePen(object): + def __init__(self, *pens): + if len(pens) == 1: + pens = pens[0] + self.pens = pens + def moveTo(self, p0): + for pen in self.pens: + pen.moveTo(p0) + def lineTo(self, p1): + for pen in self.pens: + pen.lineTo(p1) + def qCurveTo(self, p1, p2): + for pen in self.pens: + pen.qCurveTo(p1, p2) + def curveTo(self, p1, p2, p3): + for pen in self.pens: + pen.curveTo(p1, p2, p3) + def closePath(self): + for pen in self.pens: + pen.closePath() + def endPath(self): + for pen in self.pens: + pen.endPath() + def addComponent(self, glyphName, transformation): + for pen in self.pens: + pen.addComponent(glyphName, transformation) + + def _vdiff(v0, v1): return tuple(b-a for a,b in zip(v0,v1)) def _vlen(vec): @@ -146,9 +175,12 @@ def test(glyphsets, glyphs=None, names=None): allVectors.append(contourVectors) for contour in contourPens: stats = StatisticsPen(glyphset=glyphset) - contour.draw(stats) + perim = PerimeterPen(glyphset=glyphset) + tee = TeePen([stats, perim]) + contour.draw(tee) size = abs(stats.area) ** .5 * .5 vector = ( + int(perim.value), int(size), int(stats.meanX), int(stats.meanY),