DIRECTORY ImagerBasics USING [Box, Extents, Rectangle, VEC]; ImagerBasicsImpl: CEDAR PROGRAM EXPORTS ImagerBasics ~ BEGIN OPEN ImagerBasics; BoxFromRectangle: PUBLIC PROC [r: Rectangle] RETURNS [b: Box] ~ { Pt: PROC [x, y: REAL] ~ INLINE { IF x > b.xmax THEN b.xmax _ x ELSE IF x < b.xmin THEN b.xmin _ x; IF y > b.ymax THEN b.ymax _ y ELSE IF y < b.ymin THEN b.ymin _ y; }; b _ [r.x, r.y, r.x, r.y]; Pt[r.x+r.w, r.y+r.h]; }; RectangleFromBox: PUBLIC PROC [b: Box] RETURNS [Rectangle] ~ { IF b.xmin > b.xmax THEN {t: REAL _ b.xmin; b.xmin _ b.xmax; b.xmax _ t}; IF b.ymin > b.ymax THEN {t: REAL _ b.ymin; b.ymin _ b.ymax; b.ymax _ t}; RETURN [[x: b.xmin, y: b.ymin, w: b.xmax-b.xmin, h: b.ymax-b.ymin]]; }; BoxFromExtents: PUBLIC PROC [e: Extents] RETURNS [b: Box] ~ { Pt: PROC [x, y: REAL] ~ INLINE { IF x > b.xmax THEN b.xmax _ x ELSE IF x < b.xmin THEN b.xmin _ x; IF y > b.ymax THEN b.ymax _ y ELSE IF y < b.ymin THEN b.ymin _ y; }; b _ [e.rightExtent, e.ascent, e.rightExtent, e.ascent]; Pt[-e.leftExtent, -e.descent]; }; ExtentsFromBox: PUBLIC PROC [b: Box] RETURNS [Extents] ~ { IF b.xmin > b.xmax THEN {t: REAL _ b.xmin; b.xmin _ b.xmax; b.xmax _ t}; IF b.ymin > b.ymax THEN {t: REAL _ b.ymin; b.ymin _ b.ymax; b.ymax _ t}; RETURN [[leftExtent: -b.xmin, descent: -b.ymin, rightExtent: b.xmax, ascent: b.ymax]]; }; RectangleFromExtents: PUBLIC PROC [e: Extents] RETURNS [Rectangle] ~ { Pt: PROC [x, y: REAL] ~ INLINE { IF x > b.xmax THEN b.xmax _ x ELSE IF x < b.xmin THEN b.xmin _ x; IF y > b.ymax THEN b.ymax _ y ELSE IF y < b.ymin THEN b.ymin _ y; }; b: Box _ [e.rightExtent, e.ascent, e.rightExtent, e.ascent]; Pt[-e.leftExtent, -e.descent]; RETURN[[x: b.xmin, y: b.ymin, w: b.xmax-b.xmin, h: b.ymax-b.ymin]]; }; ExtentsFromRectangle: PUBLIC PROC [r: Rectangle] RETURNS [Extents] ~ { b: Box _ [xmin: r.x, ymin: r.y, xmax: r.x+r.w, ymax: r.y+r.h]; IF b.xmin > b.xmax THEN {t: REAL _ b.xmin; b.xmin _ b.xmax; b.xmax _ t}; IF b.ymin > b.ymax THEN {t: REAL _ b.ymin; b.ymin _ b.ymax; b.ymax _ t}; RETURN [[leftExtent: -b.xmin, descent: -b.ymin, rightExtent: b.xmax, ascent: b.ymax]]; }; IntersectBox: PUBLIC PROC [a: Box, b: Box] RETURNS [c: Box] ~ { IF a.xmin > a.xmax THEN {t: REAL _ a.xmin; a.xmin _ a.xmax; a.xmax _ t}; IF a.ymin > a.ymax THEN {t: REAL _ a.ymin; a.ymin _ a.ymax; a.ymax _ t}; IF b.xmin > b.xmax THEN {t: REAL _ b.xmin; b.xmin _ b.xmax; b.xmax _ t}; IF b.ymin > b.ymax THEN {t: REAL _ b.ymin; b.ymin _ b.ymax; b.ymax _ t}; c _ [xmin: MAX[a.xmin, b.xmin], ymin: MAX[a.ymin, b.ymin], xmax: MIN[a.xmax, b.xmax], ymax: MIN[a.ymax, b.ymax]]; IF c.xmin>=c.xmax OR c.ymin>=c.ymax THEN c _ [0, 0, 0, 0]; }; BoundBox: PUBLIC PROC [a: Box, b: Box] RETURNS [c: Box] ~ { IF a.xmin > a.xmax THEN {t: REAL _ a.xmin; a.xmin _ a.xmax; a.xmax _ t}; IF a.ymin > a.ymax THEN {t: REAL _ a.ymin; a.ymin _ a.ymax; a.ymax _ t}; IF b.xmin > b.xmax THEN {t: REAL _ b.xmin; b.xmin _ b.xmax; b.xmax _ t}; IF b.ymin > b.ymax THEN {t: REAL _ b.ymin; b.ymin _ b.ymax; b.ymax _ t}; c _ [xmin: MIN[a.xmin, b.xmin], ymin: MIN[a.ymin, b.ymin], xmax: MAX[a.xmax, b.xmax], ymax: MAX[a.ymax, b.ymax]]; }; BoundPoint: PUBLIC PROC [a: Box, b: VEC] RETURNS [Box] ~ { IF a.xmin > a.xmax THEN {t: REAL _ a.xmin; a.xmin _ a.xmax; a.xmax _ t}; IF a.ymin > a.ymax THEN {t: REAL _ a.ymin; a.ymin _ a.ymax; a.ymax _ t}; RETURN [[xmin: MIN[a.xmin, b.x], ymin: MIN[a.ymin, b.y], xmax: MAX[a.xmax, b.x], ymax: MAX[a.ymax, b.y]]]; }; END. ΄ImagerBasicsImpl.mesa Copyright c 1985, 1986 by Xerox Corporation. All rights reserved. Michael Plass, May 17, 1985 3:50:19 pm PDT Doug Wyatt, March 7, 1986 4:10:00 pm PST ΚA˜code™Kšœ Οmœ7™BK™*K™(—K™šΟk ˜ Kšœ žœžœ˜2—K˜KšΠblœž ˜Kšžœ ˜Kšœžœžœ˜K˜šΟnœžœžœžœ ˜Aš œžœžœžœ˜ Kš žœ žœ žœžœ žœ ˜AKš žœ žœ žœžœ žœ ˜AKšœ˜—K˜K˜Kšœ˜K˜—š œžœžœ žœ˜>Kšžœžœžœ(˜HKšžœžœžœ(˜HKšžœ>˜DKšœ˜—K˜š œžœžœžœ ˜=š œžœžœžœ˜ Kš žœ žœ žœžœ žœ ˜AKš žœ žœ žœžœ žœ ˜AKšœ˜—K˜7Kšœ˜Kšœ˜K˜—š œžœžœ žœ˜:Kšžœžœžœ(˜HKšžœžœžœ(˜HKšžœP˜VKšœ˜—K˜š œžœžœžœ˜Fš œžœžœžœ˜ Kš žœ žœ žœžœ žœ ˜AKš žœ žœ žœžœ žœ ˜AKšœ˜—K˜Kšžœžœžœ(˜HKšžœžœžœ(˜HKšžœP˜VKšœ˜K˜—K˜š  œžœžœžœ ˜?Kšžœžœžœ(˜HKšžœžœžœ(˜HKšžœžœžœ(˜HKšžœžœžœ(˜HKš œ žœžœžœžœ˜qKšžœžœžœ˜:Kšœ˜K˜—š œžœžœžœ ˜;Kšžœžœžœ(˜HKšžœžœžœ(˜HKšžœžœžœ(˜HKšžœžœžœ(˜HKš œ žœžœžœžœ˜qKšœ˜K˜—š   œžœžœ žœžœ ˜:Kšžœžœžœ(˜HKšžœžœžœ(˜HKš žœ žœžœžœžœ˜jKšœ˜K˜—Kšžœ˜—…— dY