DIRECTORY SV2d, SV3d, SVRayTypes; ObjectCast: DEFINITIONS = BEGIN Composite: TYPE = SVRayTypes.Composite; CSGTree: TYPE = SVRayTypes.CSGTree; Point2d: TYPE = SV2d.Point2d; Point3d: TYPE = SV3d.Point3d; Primitive: TYPE = SVRayTypes.Primitive; Surface: TYPE = REF ANY; Vector: TYPE = SV3d.Vector; 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: Vector]; HitArray: TYPE = REF HitArrayObj; HitArrayObj: TYPE = ARRAY[1..globalObjDepth] OF HitRec; globalObjDepth: NAT = 6; BlockCast: PROC [localRay: Ray, surfs: SurfaceArray, prim: Primitive] 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: ObjectCast.mesa Last edited by Bier on June 1, 1984 5:13:12 pm PDT Author: Eric Bier on July 29, 1984 4:47: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šœ1™1LšœN™NL˜šΟk ˜ Lšœ˜Lšœ˜Lšœ ˜ —L˜Lšœ  œ˜L˜Lš˜˜Lšœ œ˜'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 œœ7œ˜fLšž œœ6œ˜fLšž œœ9˜KLšœ˜ Lšžœœ:œ˜hLšž œœ,œœ˜Všœ˜ LšœX™X—L˜Lšœ˜L˜—…—| "