[interpolatable] One more try at overweight
This commit is contained in:
parent
a15a9a946f
commit
41ed903d45
@ -9,6 +9,7 @@ $ fonttools varLib.interpolatable font1 font2 ...
|
|||||||
from fontTools.pens.basePen import AbstractPen, BasePen
|
from fontTools.pens.basePen import AbstractPen, BasePen
|
||||||
from fontTools.pens.pointPen import AbstractPointPen, SegmentToPointPen
|
from fontTools.pens.pointPen import AbstractPointPen, SegmentToPointPen
|
||||||
from fontTools.pens.recordingPen import RecordingPen
|
from fontTools.pens.recordingPen import RecordingPen
|
||||||
|
from fontTools.pens.boundsPen import ControlBoundsPen
|
||||||
from fontTools.pens.statisticsPen import StatisticsPen, StatisticsControlPen
|
from fontTools.pens.statisticsPen import StatisticsPen, StatisticsControlPen
|
||||||
from fontTools.pens.momentsPen import OpenContourError
|
from fontTools.pens.momentsPen import OpenContourError
|
||||||
from fontTools.varLib.models import piecewiseLinearMap, normalizeLocation
|
from fontTools.varLib.models import piecewiseLinearMap, normalizeLocation
|
||||||
@ -798,23 +799,41 @@ def test_gen(
|
|||||||
# self-intersecting contour; ignore it.
|
# self-intersecting contour; ignore it.
|
||||||
contour = midRecording[ix]
|
contour = midRecording[ix]
|
||||||
if contour and (m0Vectors[ix][0] < 0) == (m1Vectors[ix][0] < 0):
|
if contour and (m0Vectors[ix][0] < 0) == (m1Vectors[ix][0] < 0):
|
||||||
size0 = m0Vectors[ix][0] * m0Vectors[ix][0]
|
|
||||||
size1 = m1Vectors[ix][0] * m1Vectors[ix][0]
|
|
||||||
|
|
||||||
size0, size1 = sorted((size0, size1))
|
|
||||||
|
|
||||||
midStats = StatisticsPen(glyphset=glyphset)
|
midStats = StatisticsPen(glyphset=glyphset)
|
||||||
contour.replay(midStats)
|
contour.replay(midStats)
|
||||||
midVector = _contour_vector_from_stats(midStats)
|
midVector = _contour_vector_from_stats(midStats)
|
||||||
|
|
||||||
|
size0 = m0Vectors[ix][0] * m0Vectors[ix][0]
|
||||||
|
size1 = m1Vectors[ix][0] * m1Vectors[ix][0]
|
||||||
midSize = midVector[0] * midVector[0]
|
midSize = midVector[0] * midVector[0]
|
||||||
|
|
||||||
|
bounds0Pen = ControlBoundsPen(glyphsets[m0idx])
|
||||||
|
bounds1Pen = ControlBoundsPen(glyphsets[m1idx])
|
||||||
|
recording0[ix].replay(bounds0Pen)
|
||||||
|
recording1[ix].replay(bounds1Pen)
|
||||||
|
bounds0 = bounds0Pen.bounds or (0, 0, 0, 0)
|
||||||
|
bounds1 = bounds1Pen.bounds or (0, 0, 0, 0)
|
||||||
|
width0, height0 = bounds0[2] - bounds0[0], bounds0[3] - bounds0[1]
|
||||||
|
width1, height1 = bounds1[2] - bounds1[0], bounds1[3] - bounds1[1]
|
||||||
|
|
||||||
|
try:
|
||||||
|
size0 /= width0 * height0
|
||||||
|
size1 /= width1 * height1
|
||||||
|
midSize /= (width0 + width1) * .5 * (height0 + height1) * .5
|
||||||
|
except ZeroDivisionError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
size0, size1 = sorted((size0, size1))
|
||||||
|
|
||||||
for overweight, problem_type in enumerate(
|
for overweight, problem_type in enumerate(
|
||||||
("underweight", "overweight")
|
("underweight", "overweight")
|
||||||
):
|
):
|
||||||
if overweight:
|
if overweight:
|
||||||
#expectedSize = (size0 * size1) ** 0.5
|
expectedSize = (size0 * size1) ** 0.5
|
||||||
#expectedSize = (size0 + size1) - expectedSize
|
expectedSize = (size0 + size1) - expectedSize
|
||||||
expectedSize = (size0 + size1) * .5
|
|
||||||
|
#expectedSize = (size0 + size1) * .5
|
||||||
else:
|
else:
|
||||||
expectedSize = (size0 * size1) ** 0.5
|
expectedSize = (size0 * size1) ** 0.5
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user