From 470b5050eea71e2ea0aee4cf94d292d0e532f3ef Mon Sep 17 00:00:00 2001 From: Just Date: Sun, 16 Jan 2000 20:37:11 +0000 Subject: [PATCH] yet another reorganization round... git-svn-id: svn://svn.code.sf.net/p/fonttools/code/trunk@58 4cde692c-a291-49d1-8350-778aa11640f8 --- Lib/fontTools/misc/arrayTools.py | 42 ++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Lib/fontTools/misc/arrayTools.py diff --git a/Lib/fontTools/misc/arrayTools.py b/Lib/fontTools/misc/arrayTools.py new file mode 100644 index 000000000..9792b7378 --- /dev/null +++ b/Lib/fontTools/misc/arrayTools.py @@ -0,0 +1,42 @@ +# +# This module should move to a more appropriate location +# + +import Numeric + + +def calcBounds(array): + """Calculate the bounding rectangle of a 2D array. + Returns a 4-tuple: + smallest x, smallest y, largest x, largest y. + """ + if len(array) == 0: + return 0, 0, 0, 0 + xmin, ymin = Numeric.minimum.reduce(array) + xmax, ymax = Numeric.maximum.reduce(array) + return xmin, ymin, xmax, ymax + + +def pointsInRect(array, rect): + """Find out which points or array are inside rect. + Returns an array with a boolean for each point. + """ + if len(array) < 1: + return [] + lefttop = rect[:2] + rightbottom = rect[2:] + condition = Numeric.logical_and( + Numeric.greater(array, lefttop), + Numeric.less(array, rightbottom)) + return Numeric.logical_and.reduce(condition, -1) + + +def normRect((l, t, r, b)): + """XXX doc""" + return min(l, r), min(t, b), max(l, r), max(t, b) + +def scaleRect((l, t, r, b), x, y): + return l * x, t * y, r * x, b * y + +def offsetRect((l, t, r, b), dx, dy): + return l+dx, t+dy, r+dx, b+dy