91 lines
2.5 KiB
Python
91 lines
2.5 KiB
Python
|
from __future__ import print_function, division, absolute_import
|
||
|
from fontTools.misc.py23 import *
|
||
|
from fontTools.pens.pointInsidePen import PointInsidePen
|
||
|
import unittest
|
||
|
|
||
|
|
||
|
class PointInsidePenTest(unittest.TestCase):
|
||
|
def test_line(self):
|
||
|
def draw_triangles(pen):
|
||
|
pen.moveTo((0,0)); pen.lineTo((10,5)); pen.lineTo((10,0))
|
||
|
pen.moveTo((9,1)); pen.lineTo((4,1)); pen.lineTo((9,4))
|
||
|
pen.closePath()
|
||
|
|
||
|
self.assertEquals(
|
||
|
" *********"
|
||
|
" ** *"
|
||
|
" ** *"
|
||
|
" * *"
|
||
|
" *",
|
||
|
self.render(draw_triangles, even_odd=True))
|
||
|
|
||
|
self.assertEquals(
|
||
|
" *********"
|
||
|
" *******"
|
||
|
" *****"
|
||
|
" ***"
|
||
|
" *",
|
||
|
self.render(draw_triangles, even_odd=False))
|
||
|
|
||
|
def test_curve(self):
|
||
|
def draw_curves(pen):
|
||
|
pen.moveTo((0,0)); pen.curveTo((9,1), (9,4), (0,5))
|
||
|
pen.moveTo((10,5)); pen.curveTo((1,4), (1,1), (10,0))
|
||
|
pen.closePath()
|
||
|
|
||
|
self.assertEquals(
|
||
|
"*** ***"
|
||
|
"**** ****"
|
||
|
"*** ***"
|
||
|
"**** ****"
|
||
|
"*** ***",
|
||
|
self.render(draw_curves, even_odd=True))
|
||
|
|
||
|
self.assertEquals(
|
||
|
"*** ***"
|
||
|
"**********"
|
||
|
"**********"
|
||
|
"**********"
|
||
|
"*** ***",
|
||
|
self.render(draw_curves, even_odd=False))
|
||
|
|
||
|
def test_qCurve(self):
|
||
|
def draw_qCurves(pen):
|
||
|
pen.moveTo((0,0)); pen.qCurveTo((15,2), (0,5))
|
||
|
pen.moveTo((10,5)); pen.qCurveTo((-5,3), (10,0))
|
||
|
pen.closePath()
|
||
|
|
||
|
self.assertEquals(
|
||
|
"*** **"
|
||
|
"**** ***"
|
||
|
"*** ***"
|
||
|
"*** ****"
|
||
|
"** ***",
|
||
|
self.render(draw_qCurves, even_odd=True))
|
||
|
|
||
|
self.assertEquals(
|
||
|
"*** **"
|
||
|
"**********"
|
||
|
"**********"
|
||
|
"**********"
|
||
|
"** ***",
|
||
|
self.render(draw_qCurves, even_odd=False))
|
||
|
|
||
|
@staticmethod
|
||
|
def render(draw_function, even_odd):
|
||
|
result = StringIO()
|
||
|
for y in range(5):
|
||
|
for x in range(10):
|
||
|
pen = PointInsidePen(None, (x + 0.5, y + 0.5), even_odd)
|
||
|
draw_function(pen)
|
||
|
if pen.getResult():
|
||
|
result.write(b"*")
|
||
|
else:
|
||
|
result.write(b" ")
|
||
|
return tounicode(result.getvalue())
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
unittest.main()
|
||
|
|