DIRECTORY Graphics, SV2d, SV3d, SVModelTypes; SVBoundBox: DEFINITIONS = BEGIN Camera: TYPE = SVModelTypes.Camera; CoordSystem: TYPE = SVModelTypes.CoordSystem; Point2d: TYPE = SV2d.Point2d; Point3d: TYPE = SV3d.Point3d; Poly3d: TYPE = SV3d.Poly3d; BoundHedron: TYPE = SVModelTypes.BoundHedron; BoundBox: TYPE = SVModelTypes.BoundBox; CreateBoundHedron: PROC [len: NAT] RETURNS [bh: BoundHedron]; AddBoundHedronPoint: PROC [bh: BoundHedron, point: Point3d]; AddBoundHedronPoly: PROC [bh: BoundHedron, poly: Poly3d]; RectangularBoundHedron: PROC [sx, sy, sz: REAL] RETURNS [bh: BoundHedron]; RectangularBoundHedron2: PROC [x1, x2, y1, y2, z1, z2: REAL] RETURNS [bh: BoundHedron]; PyramidBoundHedron: PROC [sx, sy, sz: REAL] RETURNS [bh: BoundHedron]; HexagonalBoundHedron: PROC [r, hOver2: REAL] RETURNS [bh: BoundHedron]; HexPyramidBoundHedron: PROC [r, h: REAL] RETURNS [bh: BoundHedron]; GeneralConeBoundHedron: PROC [r1, h1, r2, h2: REAL] RETURNS [bh: BoundHedron]; DiskBoundHedron: PROC [r, h: REAL] RETURNS [bh: BoundHedron]; ClearBoundHedron: PROC [bh: BoundHedron]; DrawBoundHedron: PROC [dc: Graphics.Context, bh: BoundHedron, localWRTWorld: CoordSystem, camera: Camera, screen: CoordSystem]; CenterOfMassBoundHedron: PROC [bh: BoundHedron] RETURNS [cm: Point3d]; BoundBoxFromBoundHedron: PROC [bh: BoundHedron, camera: Camera, localCS: CoordSystem] RETURNS [boundBox: BoundBox]; BoundBoxFromValues: PROC [minX, minY, maxX, maxY: REAL] RETURNS [boundBox: BoundBox]; PointInBoundBox: PROC [cameraPoint: Point2d, boundBox: BoundBox] RETURNS [BOOL]; UnionCombineBoundBoxes: PROC [bb1, bb2: BoundBox] RETURNS [newBB: BoundBox]; IntersectionCombineBoundBoxes: PROC [bb1, bb2: BoundBox] RETURNS [newBB: BoundBox]; DifferenceCombineBoundBoxes: PROC [bb1, bb2: BoundBox] RETURNS [newBB: BoundBox]; DrawBoundBox: PROC [dc: Graphics.Context, boundBox: BoundBox, screen: CoordSystem]; ComplementBoundBox: PROC [dc: Graphics.Context, boundBox: BoundBox, screen: CoordSystem]; END. File: SVBoundBox.mesa Last edited by Bier on July 29, 1984 3:13:12 pm PDT Contents: Procedures for creating bounding polyhedra of master objects, and for deriving "3-d" bounding boxes from these polyhedra. Procedures for combining these bounding boxes with union, intersection and difference operators. Rectangular parallelpiped centered on the origin with dimensions given Like RectangularBoundHedron but use limits given instead of centering on origin A pyramid with base of size sx by sz on the y=0 plane and tip at [0, sy, 0]. A vertical hexagonal prism, ie the shape which would be produced by sweeping the hexagon (which circumscribes the circle x^2 + z^2 = r^2) from [0, -h/2, 0] to [0, h/2, 0]. A pyramid having a hexagonal base of inner radius r on the y = 0 plane (centered on [0,0,]) and having tip at [0, h, 0] Bounds a cone slice (cone around y axis) with radius r1 at y=h1 and radius r2 at y = h2. Currently uses two hexagons. Octagons may follow. Bounds a disk (centered on y axis) with radius r at y = h; Κ›– "cedar" style˜Iheadšœ™Iprocšœ3™3Lšœε™εL˜šΟk ˜ Lšœ ˜ Lšœ˜L˜Lšœ ˜ —L˜Lšœ  œ˜Lš˜˜Lšœœ˜#Lšœ œ˜-Lšœ œ˜Lšœ œ˜Lšœœ˜L˜Lšœ œ˜-Lšœ œ˜'L˜—LšΟnœœœœ˜=Lšžœœ#˜