summaryrefslogtreecommitdiff
path: root/misc/pylib/robofab/pens/angledMarginPen.py
diff options
context:
space:
mode:
Diffstat (limited to 'misc/pylib/robofab/pens/angledMarginPen.py')
-rw-r--r--misc/pylib/robofab/pens/angledMarginPen.py132
1 files changed, 0 insertions, 132 deletions
diff --git a/misc/pylib/robofab/pens/angledMarginPen.py b/misc/pylib/robofab/pens/angledMarginPen.py
deleted file mode 100644
index 49ff8eed3..000000000
--- a/misc/pylib/robofab/pens/angledMarginPen.py
+++ /dev/null
@@ -1,132 +0,0 @@
-from robofab.world import RFont
-from fontTools.pens.basePen import BasePen
-from robofab.misc.arrayTools import updateBounds, pointInRect, unionRect
-from robofab.misc.bezierTools import calcCubicBounds, calcQuadraticBounds
-from robofab.pens.filterPen import _estimateCubicCurveLength, _getCubicPoint
-import math
-
-
-
-__all__ = ["AngledMarginPen", "getAngledMargins",
- "setAngledLeftMargin", "setAngledRightMargin",
- "centerAngledMargins"]
-
-
-
-class AngledMarginPen(BasePen):
- """
- Angled Margin Pen
-
- Pen to calculate the margins as if the margin lines were slanted
- according to the font.info.italicAngle.
-
- Notes:
- - this pen works on the on-curve points, and approximates the distance to curves.
- - results will be float.
- - when used in FontLab, the resulting margins may be slightly
- different from the values originally set, due to rounding errors.
- - similar to what RoboFog used to do.
- - RoboFog had a special attribute for "italicoffset", horizontal
- shift of all glyphs. This is missing in Robofab.
- """
- def __init__(self, glyphSet, width, italicAngle):
- BasePen.__init__(self, glyphSet)
- self.width = width
- self._angle = math.radians(90+italicAngle)
- self.maxSteps = 100
- self.margin = None
- self._left = None
- self._right = None
- self._start = None
- self.currentPt = None
-
- def _getAngled(self, pt):
- r = (g.width + (pt[1] / math.tan(self._angle)))-pt[0]
- l = pt[0]-((pt[1] / math.tan(self._angle)))
- if self._right is None:
- self._right = r
- else:
- self._right = min(self._right, r)
- if self._left is None:
- self._left = l
- else:
- self._left = min(self._left, l)
- #print pt, l, r
- self.margin = self._left, self._right
-
- def _moveTo(self, pt):
- self._start = self.currentPt = pt
-
- def _addMoveTo(self):
- if self._start is None:
- return
- self._start = self.currentPt = None
-
- def _lineTo(self, pt):
- self._addMoveTo()
- self._getAngled(pt)
-
- def _curveToOne(self, pt1, pt2, pt3):
- step = 1.0/self.maxSteps
- factors = range(0, self.maxSteps+1)
- for i in factors:
- pt = _getCubicPoint(i*step, self.currentPt, pt1, pt2, pt3)
- self._getAngled(pt)
- self.currentPt = pt3
-
- def _qCurveToOne(self, bcp, pt):
- self._addMoveTo()
- # add curve tracing magic here.
- self._getAngled(pt)
- self.currentPt = pt3
-
-def getAngledMargins(glyph, font):
- """Get the angled margins for this glyph."""
- pen = AngledMarginPen(font, glyph.width, font.info.italicAngle)
- glyph.draw(pen)
- return pen.margin
-
-def setAngledLeftMargin(glyph, font, value):
- """Set the left angled margin to value, adjusted for font.info.italicAngle."""
- pen = AngledMarginPen(font, glyph.width, font.info.italicAngle)
- g.draw(pen)
- isLeft, isRight = pen.margin
- glyph.leftMargin += value-isLeft
-
-def setAngledRightMargin(glyph, font, value):
- """Set the right angled margin to value, adjusted for font.info.italicAngle."""
- pen = AngledMarginPen(font, glyph.width, font.info.italicAngle)
- g.draw(pen)
- isLeft, isRight = pen.margin
- glyph.rightMargin += value-isRight
-
-def centerAngledMargins(glyph, font):
- """Center the glyph on angled margins."""
- pen = AngledMarginPen(font, glyph.width, font.info.italicAngle)
- g.draw(pen)
- isLeft, isRight = pen.margin
- setAngledLeftMargin(glyph, font, (isLeft+isRight)*.5)
- setAngledRightMargin(glyph, font, (isLeft+isRight)*.5)
-
-def guessItalicOffset(glyph, font):
- """Guess the italic offset based on the margins of a symetric glyph.
- For instance H or I.
- """
- l, r = getAngledMargins(glyph, font)
- return l - (l+r)*.5
-
-
-if __name__ == "__main__":
-
- # example for FontLab, with a glyph open.
- from robofab.world import CurrentFont, CurrentGlyph
- g = CurrentGlyph()
- f = CurrentFont()
-
- print "margins!", getAngledMargins(g, f)
- # set the angled margin to a value
- m = 50
- setAngledLeftMargin(g, f, m)
- setAngledRightMargin(g, f, m)
- g.update()
-