DIRECTORY GGCoreTypes, Imager, ImagerTransformation; GGBoundBox: CEDAR DEFINITIONS = BEGIN BoundBox: TYPE = GGCoreTypes.BoundBox; Point: TYPE = Imager.VEC; Vector: TYPE = Imager.VEC; emptyBoundBox: BoundBox; -- [loX, loY: LargestNumber, hiX, hiY: SmallestNormalizedNumber] CreateBoundBox: PROC [loX, loY, hiX, hiY: REAL, null: BOOL _ FALSE, infinite: BOOL _ FALSE] RETURNS [bBox: BoundBox]; NullBoundBox: PROC [] RETURNS [bBox: BoundBox]; CopyBoundBox: PROC [bBox: BoundBox] RETURNS [copy: BoundBox]; BoundBoxOfBoxes: PROC [list: LIST OF BoundBox] RETURNS [bigBox: BoundBox]; BoundBoxOfBoundBox: PROC [box: BoundBox, transform: ImagerTransformation.Transformation] RETURNS [newBox: BoundBox]; BoundBoxFromRectangle: PROC [rect: Imager.Rectangle] RETURNS [bBox: BoundBox]; RectangleFromBoundBox: PROC [bBox: BoundBox] RETURNS [rect: Imager.Rectangle]; BoundBoxOfPixelArray: PROC [pa: Imager.PixelArray] RETURNS [bBox: BoundBox]; BoundBoxOfBitMap: PROC [base: LONG POINTER, wordsPerLine: NAT, sMin, fMin, sSize, fSize: NAT, tx, ty: INTEGER _ 0] RETURNS [bBox: BoundBox]; EnlargeByBox: PROC [bBox: BoundBox, by: BoundBox]; EnlargeByPoint: PROC [bBox: BoundBox, point: Point]; EnlargeByVector: PROC [bBox: BoundBox, vector: Vector]; EnlargeByOffset: PROC [bBox: BoundBox, offset: REAL]; UpdateBoundBox: PROC [bBox: BoundBox, loX, loY, hiX, hiY: REAL]; UpdateBoundBoxOfBoundBox: PROC [bBox: BoundBox, localBox: BoundBox, transform: ImagerTransformation.Transformation]; UpdateCopyBoundBox: PROC [bBox: BoundBox, from: BoundBox]; PointIsInBox: PROC [test: Point, box: GGCoreTypes.BoundBoxObj] RETURNS [BOOL]; PointIsInGrownBox: PROC [test: Point, box: BoundBox, offset: REAL] RETURNS [BOOL]; Centroid: PROC [box: BoundBox] RETURNS [centroid: Point, success: BOOL]; EraseWithinBoundBox: PROC [dc: Imager.Context, bBox: BoundBox]; Clip: PROC [dc: Imager.Context, bBox: BoundBox]; MaskArray: TYPE = ARRAY[0..4) OF BOOL; NearestPoint: PROC [bBox: BoundBox, testPoint: Point, tolerance: REAL _ 1E6, mask: MaskArray _ ALL[TRUE]] RETURNS [bestDist: REAL, bestJoint: NAT, bestPoint: Point, success: BOOL]; NearestSegment: PROC [bBox: BoundBox, testPoint: Point, tolerance: REAL _ 1E6, mask: MaskArray _ ALL[TRUE]] RETURNS [bestDist: REAL, bestSeg: NAT, bestPoint: Point, success: BOOL]; END. ΨGGBoundBox.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Last edited by Bier on July 16, 1987 7:36:17 pm PDT Contents: Procedures for creating and combining bounding boxes for refresh efficiency. Pier, May 22, 1987 10:32:22 am PDT Kurlander August 23, 1986 5:08:14 pm PDT Bier, May 2, 1989 7:22:28 pm PDT Routines that create a new BoundBox. Computes a bounding box in units of screen dots for the given pixel array. The lower left corner will be [0,0]. Computes a bounding box in units of screen dots for the given bit map. The lower left corner will be [0,0]. Routines that modify an existing BoundBox. Update bBox to be the bounding box of itself and itself offset by vector. Useful to take drop shadows into account, for instance. Enlarges bBox to include a border of width offset around bBox. Useful to allow for stroke width of a segment, for instance. Modifies the numerical fields of bBox. Information Derived from a BoundBox Returns TRUE if test is contained within box. Operates on BoundBoxObj (which is presumably on the execution stack). Returns TRUE if test is contained within [box.loX-offset, box.loY-offset, box.hiX+offset, box.hiY+offset]. Drawing BoundBoxes. Hit Testing BoundBoxes. Κ;˜code™Kšœ Οmœ1™