-- File: SweepCast.mesa -- Last edited by Bier on December 18, 1982 1:23 am -- Author: Eric Bier on July 3, 1983 1:59 pm -- Contents: Ray Tracing Code for linear and revolute sweep shapes. DIRECTORY CastRays, CSG, SV2d, SVFaces, SweepGeometry, SVBoundBox, SVPolygon2d, SVVector3d; SweepCast: DEFINITIONS = BEGIN -- IMPORTED TYPES BoundBox: TYPE = SVBoundBox.BoundBox; Classification: TYPE = REF ClassificationObj; ClassificationObj: TYPE = CastRays.ClassificationObj; EdgeOnRect: TYPE = SVFaces.EdgeOnRect; LinearMesh: TYPE = REF LinearMeshRecord; LinearMeshRecord: TYPE = SweepGeometry.LinearMeshRecord; Polygon: TYPE = SVPolygon2d.Polygon; Primitive: TYPE = CSG.Primitive; Ray: TYPE = REF RayObj; RayObj: TYPE = CastRays.RayObj; RevoluteMesh: TYPE = SweepGeometry.RevoluteMesh; Point2d: TYPE = SV2d.Point2d; Vector: TYPE = SVVector3d.Vector; -- TYPES DEFINED HERE LinSweepFaces: TYPE = REF LinSweepFacesObj; LinSweepFacesObj: TYPE = RECORD [ mesh: LinearMesh, poly: Polygon, len: NAT, seq: SEQUENCE maxFaces: NAT OF EdgeOnRect]; RevoSweepFaces: TYPE = REF RevoSweepFacesObj; RevoSweepFacesObj: TYPE = RECORD [ mesh: RevoluteMesh, len: NAT, seq: SEQUENCE maxFaces: NAT OF RevoFace]; RevoFace: TYPE = REF ANY; -- will be an SVFaces.Cone, SVFaces.DiskRing, or SVFaces.Cylinder; SubBoxesBody: TYPE = REF SubBoxesBodyObj; SubBoxesBodyObj: TYPE = RECORD [ len: NAT, seq: SEQUENCE maxFaces: NAT OF BoundBox]; RevoHitArray: TYPE = REF RevoHitArrayObj; RevoHitArrayObj: TYPE = RECORD [ count: NAT, array: ARRAY[1..SweepGeometry.maxLinesOfLat+1] OF RevoHitRec, inOuts: ARRAY[1..SweepGeometry.maxLinesOfLat+1] OF BOOL ]; RevoHitRec: TYPE = REF RevoHitRecObj; RevoHitRecObj: TYPE = RECORD [ param: REAL, normal: Vector, lineOfLatitude: NAT]; LinHitArray: TYPE = REF LinHitArrayObj; LinHitArrayObj: TYPE = RECORD [ count: NAT, array: ARRAY[1..SweepGeometry.maxMeshLen-1] OF LinHitRec ]; LinHitRec: TYPE = REF LinHitRecObj; LinHitRecObj: TYPE = RECORD [ param: REAL, normal: Vector, index: NAT]; -- index of front is 0, back is linMesh.len + 1; LinCast: PROC [localRay: Ray, prim: Primitive, linMesh: LinearMesh, faces: LinSweepFaces] RETURNS [class: Classification]; RevoCast: PROC [cameraPoint: Point2d, localRay: Ray, prim: Primitive, faces: RevoSweepFaces, boxes: SubBoxesBody] RETURNS [class: Classification]; -- prim contains a RevoSweepFaces in prim.hints. RevoCastNoBBoxes: PROC [localRay: Ray, prim: Primitive, faces: RevoSweepFaces] RETURNS [class: Classification]; MakeRevoSweepFaces: PROC [revMesh: RevoluteMesh] RETURNS [faces: RevoSweepFaces]; MakeLinSweepFaces: PROC [linMesh: LinearMesh] RETURNS [faces: LinSweepFaces]; END. ΚΖ– "Mesa" style˜IprocšΗΟcΎœΟk œ žœXž œžœœ žœ(žœžœ'žœ+žœ#žœžœ%žœ,žœ#žœžœžœžœžœ"žœ(žœžœœžœžœ%žœžœ*žœžœ žœžœ žœžœ'žœžœžœžœ žœžœžœžœžœDœžœžœ#žœžœ žœžœ žœžœžœžœ#žœžœ žœ žœ#žœžœ#žœžœžœžœžœžœ žœ"žœžœžœ!žœžœ žœ žœ žœžœžœžœžœ žœžœ1œΟnœžœMžœŸœžœdžœœŸœžœ9žœŸœžœžœŸœžœžœžœ˜τ—…— v B