DIRECTORY SV2d, SV3d, SVMasterObjectTypes, SVRayTypes; SVObjectCast: CEDAR DEFINITIONS = BEGIN BlockData: TYPE = SVMasterObjectTypes.BlockData; Composite: TYPE = SVRayTypes.Composite; CSGTree: TYPE = SVRayTypes.CSGTree; Point2d: TYPE = SV2d.Point2d; Point3d: TYPE = SV3d.Point3d; Primitive: TYPE = SVRayTypes.Primitive; Surface: TYPE = REF ANY; Vector3d: TYPE = SV3d.Vector3d; RectSurface: TYPE = REF RectSurfaceObj; RectSurfaceObj: TYPE = RECORD [ rectType: RectType]; RectType: TYPE = {up, down, left, right, front, back}; TubeSurface: TYPE = REF TubeSurfaceObj; TubeSurfaceObj: TYPE = RECORD [ ]; DiskSurface: TYPE = REF DiskSurfaceObj; DiskSurfaceObj: TYPE = RECORD [ diskType: DiskType]; DiskType: TYPE = {top, bottom}; ShellSurface: TYPE = REF ShellSurfaceObj; ShellSurfaceObj: TYPE = RECORD [ ]; ConeSurface: TYPE = REF ConeSurfaceObj; ConeSurfaceObj: TYPE = RECORD [ ]; ToroidalSurface: TYPE = REF ToroidalSurfaceObj; ToroidalSurfaceObj: TYPE = RECORD [ ]; ParameterArray: TYPE = SVRayTypes.ParameterArray; SurfaceArray: TYPE = SVRayTypes.SurfaceArray; InOutArray: TYPE = SVRayTypes.InOutArray; NormalArray: TYPE = SVRayTypes.NormalArray; Classification: TYPE = SVRayTypes.Classification; Ray: TYPE = SVRayTypes.Ray; HitRec: TYPE = REF HitRecObj; HitRecObj: TYPE = RECORD [ t: REAL, surf: Surface, normal: Vector3d]; HitArray: TYPE = REF HitArrayObj; HitArrayObj: TYPE = ARRAY[1..globalObjDepth] OF HitRec; globalObjDepth: NAT = 6; BlockCast: PROC [localRay: Ray, prim: Primitive, blockRec: BlockData, surfs: SurfaceArray] RETURNS [class: Classification]; SphereCast: PROC [localRay: Ray, thisShell: Surface, prim: Primitive] RETURNS [class: Classification]; CylinderCast: PROC [localRay: Ray, surfaces: SurfaceArray, prim: Primitive] RETURNS [class: Classification]; ConeCast: PROC [localRay: Ray, surfaces: SurfaceArray, prim: Primitive] RETURNS [class: Classification]; ToroidCast: PROC [localRay: Ray, prim: Primitive, torusRec: REF ANY, surface: Surface] RETURNS [class: Classification]; END. ˆFile: SVObjectCast.mesa Last edited by Bier on June 1, 1984 5:13:12 pm PDT Author: Eric Bier on May 22, 1987 1:20:45 pm PDT Contents: Procedures to determine intersections of rays with primitive objects Each primitive shape must have a procedure here which can classify a ray with respect to it. torusRec is a BasicObject3d.TorusRec. It is a REF ANY to avoid compilation dependencies Κ– "cedar" style˜Iheadšœ™Iprocšœ2™2Lšœ0™0LšœN™NL˜šΟk ˜ Lšœ,˜,—L˜Lšœœ˜!L˜Lš˜˜Lšœ œ!˜0Lšœ œ˜'Lšœ œ˜#Lšœ œ˜Lšœ œ˜Lšœ œ˜'Lšœ œœœ˜Lšœ œ˜L˜Lšœ œœ˜'šœœœ˜Lšœ˜—Lšœ œ(˜6L˜Lšœ œœ˜'šœœœ˜Lšœ˜—Lšœ œœ˜'šœœœ˜Lšœ˜—Lšœ œ˜L˜Lšœœœ˜)šœœœ˜ Lšœ˜—Lšœ œœ˜'šœœœ˜Lšœ˜—Lšœœœ˜/šœœœ˜#Lšœ˜—L˜Lšœœ˜1Lšœœ˜-Lšœ œ˜)Lšœ œ˜+L˜Lšœœ˜1L˜Lšœœ˜L˜Lšœœœ ˜šœ œœ˜Lšœœ˜Lšœ˜Lšœ˜—Lšœ œœ ˜!Lšœ œœœ˜7Lšœœ˜L˜Lšœ\™\—LšΟn œœLœ˜{Lšž œœ6œ˜fLšž œœ9˜KLšœ˜ Lšžœœ:œ˜hLšž œœ,œœ˜Všœ˜ LšœX™X—L˜Lšœ˜L˜—…—ζ ‹