arrayTools: Various array and rectangle tools
Routines for calculating bounding boxes, point in rectangle calculations and so on.
- fontTools.misc.arrayTools.calcBounds(array)[source]
Calculate the bounding rectangle of a 2D points array.
- Parameters:
array – A sequence of 2D tuples.
- Returns:
A four-item tuple representing the bounding rectangle
(xMin, yMin, xMax, yMax)
.
- fontTools.misc.arrayTools.calcIntBounds(array, round=<function otRound>)[source]
Calculate the integer bounding rectangle of a 2D points array.
Values are rounded to closest integer towards
+Infinity
using thefontTools.misc.fixedTools.otRound()
function by default, unless an optionalround
function is passed.- Parameters:
array – A sequence of 2D tuples.
round – A rounding function of type
f(x: float) -> int
.
- Returns:
(xMin, yMin, xMax, yMax)
.- Return type:
A four-item tuple of integers representing the bounding rectangle
- fontTools.misc.arrayTools.updateBounds(bounds, p, min=<built-in function min>, max=<built-in function max>)[source]
Add a point to a bounding rectangle.
- Parameters:
bounds – A bounding rectangle expressed as a tuple
(xMin, yMin, xMax, yMax), or None
.p – A 2D tuple representing a point.
min – functions to compute the minimum and maximum.
max – functions to compute the minimum and maximum.
- Returns:
The updated bounding rectangle
(xMin, yMin, xMax, yMax)
.
- fontTools.misc.arrayTools.pointInRect(p, rect)[source]
Test if a point is inside a bounding rectangle.
- Parameters:
p – A 2D tuple representing a point.
rect – A bounding rectangle expressed as a tuple
(xMin, yMin, xMax, yMax)
.
- Returns:
True
if the point is inside the rectangle,False
otherwise.
- fontTools.misc.arrayTools.pointsInRect(array, rect)[source]
Determine which points are inside a bounding rectangle.
- Parameters:
array – A sequence of 2D tuples.
rect – A bounding rectangle expressed as a tuple
(xMin, yMin, xMax, yMax)
.
- Returns:
A list containing the points inside the rectangle.
- fontTools.misc.arrayTools.vectorLength(vector)[source]
Calculate the length of the given vector.
- Parameters:
vector – A 2D tuple.
- Returns:
The Euclidean length of the vector.
- fontTools.misc.arrayTools.asInt16(array)[source]
Round a list of floats to 16-bit signed integers.
- Parameters:
array – List of float values.
- Returns:
A list of rounded integers.
- fontTools.misc.arrayTools.normRect(rect)[source]
Normalize a bounding box rectangle.
This function “turns the rectangle the right way up”, so that the following holds:
xMin <= xMax and yMin <= yMax
- Parameters:
rect – A bounding rectangle expressed as a tuple
(xMin, yMin, xMax, yMax)
.- Returns:
A normalized bounding rectangle.
- fontTools.misc.arrayTools.scaleRect(rect, x, y)[source]
Scale a bounding box rectangle.
- Parameters:
rect – A bounding rectangle expressed as a tuple
(xMin, yMin, xMax, yMax)
.x – Factor to scale the rectangle along the X axis.
Y – Factor to scale the rectangle along the Y axis.
- Returns:
A scaled bounding rectangle.
- fontTools.misc.arrayTools.offsetRect(rect, dx, dy)[source]
Offset a bounding box rectangle.
- Parameters:
rect – A bounding rectangle expressed as a tuple
(xMin, yMin, xMax, yMax)
.dx – Amount to offset the rectangle along the X axis.
dY – Amount to offset the rectangle along the Y axis.
- Returns:
An offset bounding rectangle.
- fontTools.misc.arrayTools.insetRect(rect, dx, dy)[source]
Inset a bounding box rectangle on all sides.
- Parameters:
rect – A bounding rectangle expressed as a tuple
(xMin, yMin, xMax, yMax)
.dx – Amount to inset the rectangle along the X axis.
dY – Amount to inset the rectangle along the Y axis.
- Returns:
An inset bounding rectangle.
- fontTools.misc.arrayTools.sectRect(rect1, rect2)[source]
Test for rectangle-rectangle intersection.
- Parameters:
rect1 – First bounding rectangle, expressed as tuples
(xMin, yMin, xMax, yMax)
.rect2 – Second bounding rectangle.
- Returns:
A boolean and a rectangle. If the input rectangles intersect, returns
True
and the intersecting rectangle. ReturnsFalse
and(0, 0, 0, 0)
if the input rectangles don’t intersect.
- fontTools.misc.arrayTools.unionRect(rect1, rect2)[source]
Determine union of bounding rectangles.
- Parameters:
rect1 – First bounding rectangle, expressed as tuples
(xMin, yMin, xMax, yMax)
.rect2 – Second bounding rectangle.
- Returns:
The smallest rectangle in which both input rectangles are fully enclosed.
- fontTools.misc.arrayTools.rectCenter(rect)[source]
Determine rectangle center.
- Parameters:
rect – Bounding rectangle, expressed as tuples
(xMin, yMin, xMax, yMax)
.- Returns:
A 2D tuple representing the point at the center of the rectangle.
- fontTools.misc.arrayTools.rectArea(rect)[source]
Determine rectangle area.
- Parameters:
rect – Bounding rectangle, expressed as tuples
(xMin, yMin, xMax, yMax)
.- Returns:
The area of the rectangle.
- fontTools.misc.arrayTools.intRect(rect)[source]
Round a rectangle to integer values.
Guarantees that the resulting rectangle is NOT smaller than the original.
- Parameters:
rect – Bounding rectangle, expressed as tuples
(xMin, yMin, xMax, yMax)
.- Returns:
A rounded bounding rectangle.
- fontTools.misc.arrayTools.quantizeRect(rect, factor=1)[source]
>>> bounds = (72.3, -218.4, 1201.3, 919.1) >>> quantizeRect(bounds) (72, -219, 1202, 920) >>> quantizeRect(bounds, factor=10) (70, -220, 1210, 920) >>> quantizeRect(bounds, factor=100) (0, -300, 1300, 1000)
- fontTools.misc.arrayTools.pairwise(iterable, reverse=False)[source]
Iterate over current and next items in iterable.
- Parameters:
iterable – An iterable
reverse – If true, iterate in reverse order.
- Returns:
A iterable yielding two elements per iteration.
Example
>>> tuple(pairwise([])) () >>> tuple(pairwise([], reverse=True)) () >>> tuple(pairwise([0])) ((0, 0),) >>> tuple(pairwise([0], reverse=True)) ((0, 0),) >>> tuple(pairwise([0, 1])) ((0, 1), (1, 0)) >>> tuple(pairwise([0, 1], reverse=True)) ((1, 0), (0, 1)) >>> tuple(pairwise([0, 1, 2])) ((0, 1), (1, 2), (2, 0)) >>> tuple(pairwise([0, 1, 2], reverse=True)) ((2, 1), (1, 0), (0, 2)) >>> tuple(pairwise(['a', 'b', 'c', 'd'])) (('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'a')) >>> tuple(pairwise(['a', 'b', 'c', 'd'], reverse=True)) (('d', 'c'), ('c', 'b'), ('b', 'a'), ('a', 'd'))