arrayTools

fontTools.misc.arrayTools.calcBounds(array)

Return the bounding rectangle of a 2D points array as a tuple: (xMin, yMin, xMax, yMax)

fontTools.misc.arrayTools.updateBounds(bounds, (x, y), min=<built-in function min>, max=<built-in function max>)

Return the bounding recangle of rectangle bounds and point (x, y).

fontTools.misc.arrayTools.pointInRect((x, y), rect)

Return True when point (x, y) is inside rect.

fontTools.misc.arrayTools.pointsInRect(array, rect)

Find out which points or array are inside rect. Returns an array with a boolean for each point.

fontTools.misc.arrayTools.vectorLength(vector)

Return the length of the given vector.

fontTools.misc.arrayTools.asInt16(array)

Round and cast to 16 bit integer.

fontTools.misc.arrayTools.normRect((xMin, yMin, xMax, yMax))

Normalize the rectangle so that the following holds: xMin <= xMax and yMin <= yMax

fontTools.misc.arrayTools.scaleRect((xMin, yMin, xMax, yMax), x, y)

Scale the rectangle by x, y.

fontTools.misc.arrayTools.offsetRect((xMin, yMin, xMax, yMax), dx, dy)

Offset the rectangle by dx, dy.

fontTools.misc.arrayTools.insetRect((xMin, yMin, xMax, yMax), dx, dy)

Inset the rectangle by dx, dy on all sides.

fontTools.misc.arrayTools.sectRect((xMin1, yMin1, xMax1, yMax1), (xMin2, yMin2, xMax2, yMax2))

Return a boolean and a rectangle. If the input rectangles intersect, return True and the intersecting rectangle. Return False and (0, 0, 0, 0) if the input rectangles don’t intersect.

fontTools.misc.arrayTools.unionRect((xMin1, yMin1, xMax1, yMax1), (xMin2, yMin2, xMax2, yMax2))

Return the smallest rectangle in which both input rectangles are fully enclosed. In other words, return the total bounding rectangle of both input rectangles.

fontTools.misc.arrayTools.rectCenter((xMin, yMin, xMax, yMax))

Return the center of the rectangle as an (x, y) coordinate.

fontTools.misc.arrayTools.intRect((xMin, yMin, xMax, yMax))

Return the rectangle, rounded off to integer values, but guaranteeing that the resulting rectangle is NOT smaller than the original.

fontTools.misc.arrayTools._test()
>>> import math
>>> calcBounds([])
(0, 0, 0, 0)
>>> calcBounds([(0, 40), (0, 100), (50, 50), (80, 10)])
(0, 10, 80, 100)
>>> updateBounds((0, 0, 0, 0), (100, 100))
(0, 0, 100, 100)
>>> pointInRect((50, 50), (0, 0, 100, 100))
True
>>> pointInRect((0, 0), (0, 0, 100, 100))
True
>>> pointInRect((100, 100), (0, 0, 100, 100))
True
>>> not pointInRect((101, 100), (0, 0, 100, 100))
True
>>> list(pointsInRect([(50, 50), (0, 0), (100, 100), (101, 100)], (0, 0, 100, 100)))
[True, True, True, False]
>>> vectorLength((3, 4))
5.0
>>> vectorLength((1, 1)) == math.sqrt(2)
True
>>> list(asInt16([0, 0.1, 0.5, 0.9]))
[0, 0, 1, 1]
>>> normRect((0, 10, 100, 200))
(0, 10, 100, 200)
>>> normRect((100, 200, 0, 10))
(0, 10, 100, 200)
>>> scaleRect((10, 20, 50, 150), 1.5, 2)
(15.0, 40, 75.0, 300)
>>> offsetRect((10, 20, 30, 40), 5, 6)
(15, 26, 35, 46)
>>> insetRect((10, 20, 50, 60), 5, 10)
(15, 30, 45, 50)
>>> insetRect((10, 20, 50, 60), -5, -10)
(5, 10, 55, 70)
>>> intersects, rect = sectRect((0, 10, 20, 30), (0, 40, 20, 50))
>>> not intersects
True
>>> intersects, rect = sectRect((0, 10, 20, 30), (5, 20, 35, 50))
>>> intersects
1
>>> rect
(5, 20, 20, 30)
>>> unionRect((0, 10, 20, 30), (0, 40, 20, 50))
(0, 10, 20, 50)
>>> rectCenter((0, 0, 100, 200))
(50, 100)
>>> rectCenter((0, 0, 100, 199.0))
(50, 99.5)
>>> intRect((0.9, 2.9, 3.1, 4.1))
(0, 2, 4, 5)