DIRECTORY
Graphics,
IO,
ObjectCast,
Rope,
SV2d,
SVModelTypes,
SVRayTypes,
SVSceneTypes,
SweepGeometry;

BasicObject3d: DEFINITIONS =
BEGIN

Assembly: TYPE = SVSceneTypes.Assembly;
BoundHedron: TYPE = SVModelTypes.BoundHedron;
Camera: TYPE = SVModelTypes.Camera;
Classification: TYPE =  SVRayTypes.Classification;
CoordSystem: TYPE = SVModelTypes.CoordSystem;
LinearMesh: TYPE = SweepGeometry.LinearMesh;
LightSourceList: TYPE = SVModelTypes.LightSourceList;
MasterObject: TYPE = SVSceneTypes.MasterObject;
PlanarSurface: TYPE = SVSceneTypes.PlanarSurface;
PlanarSurfaceList: TYPE = SVSceneTypes.PlanarSurfaceList;
Point2d: TYPE = SV2d.Point2d;
Primitive: TYPE = SVRayTypes.Primitive;
Ray: TYPE = SVRayTypes.Ray;
RevoluteMesh: TYPE = SweepGeometry.RevoluteMesh;



SphereRec: TYPE = REF SphereRecObj;
SphereRecObj: TYPE = RECORD [
radius: REAL];

BlockRec: TYPE = REF BlockRecObj;
BlockRecObj: TYPE = RECORD [
x, y, z: REAL];

CylinderRec: TYPE = REF CylinderRecObj;
CylinderRecObj: TYPE = RECORD [
radius, height: REAL];

ConeRec: TYPE = REF ConeRecObj;
ConeRecObj: TYPE = RECORD [
radius, height: REAL];

TorusRec: TYPE = REF TorusRecObj;
TorusRecObj: TYPE = RECORD [
bigRadius: REAL,
sectionRadius: REAL];

LonelyAssemblyHasSon: ERROR; -- returned from *PrimitiveFromAssembly if assembly is not a primitive assembly
WrongTypeOfData: SIGNAL;  -- signalled if the assembly given to *PrimitiveFromAssembly has an assembly.object which is not a MasterObject;


TorusMakeMasterObject: PROC [name: Rope.ROPE, bigRadius: REAL, sectionRadius: REAL] RETURNS [mo: MasterObject];
LinSweepMakeMasterObject: PROC [name: Rope.ROPE, linMesh: LinearMesh] RETURNS [mo: MasterObject];
RevoSweepMakeMasterObject: PROC [name: Rope.ROPE, revMesh: RevoluteMesh] RETURNS [mo: MasterObject];



END.
��˜��File: BasicObject3d.mesa
Last edited by Bier on July 29, 1984 4:55:35 pm PDT
Copyright c 1984 by Xerox Corporation.  All rights reserved.
Contents: Defines a simple set of objects which can be display with ray casting, line drawing, or shaded planar-surface approximation
BASIC SHAPES
This module implements for each of the object classes: sphere, block, cone, cylinder, torus, linear sweep, and revolute sweep, all of the operations needed to implement that class.  These operations include (but are not limited to):
SphereMakeMasterObject: PROC [name: Rope.ROPE] RETURNS [mo: MasterObject];
SphereGetBoundHedron: PROC [mo: MasterObject] RETURNS [hedron: BoundHedron];
SphereRayCast: PROC [cameraPoint: Point2d, localRay: Ray, masterObject: REF ANY, prim: Primitive] RETURNS [class: Classification];
SpherePreprocess: PROC [prim: Primitive, camera: Camera];
SphereLineDraw: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
SphereDrawNormals: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
SphereCountSurf: PROC [masterObject: MasterObject] RETURNS [len: NAT];
SphereCountVert: PROC [masterObject: MasterObject] RETURNS [len: NAT];
SphereGetSurf: PROC [assembly: Assembly, camera: CoordSystem] RETURNS [psl: PlanarSurfaceList];
SphereDrawSurf: PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera];
SphereDrawSubBoxes: PROC [dc: Graphics.Context, prim: Primitive, screenCS: CoordSystem];
SphereFileout: PROC [f: IO.STREAM, mo: MasterObject];
SphereFilein: PROC [f: IO.STREAM, name: Rope.ROPE] RETURNS [mo: MasterObject];

BlockMakeMasterObject: PROC [name: Rope.ROPE] RETURNS [mo: MasterObject];
BlockGetBoundHedron: PROC [mo: MasterObject] RETURNS [hedron: BoundHedron];
BlockRayCast: PROC [cameraPoint: Point2d, localRay: Ray, masterObject: REF ANY, prim: Primitive] RETURNS [class: Classification];
BlockPreprocess: PROC [prim: Primitive, camera: Camera];
BlockLineDraw: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
BlockDrawNormals: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
BlockCountSurf: PROC [masterObject: MasterObject] RETURNS [len: NAT];
BlockCountVert: PROC [masterObject: MasterObject] RETURNS [len: NAT];
BlockGetSurf: PROC [assembly: Assembly, camera: CoordSystem] RETURNS [psl: PlanarSurfaceList];
BlockDrawSurf: PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera];
BlockDrawSubBoxes: PROC [dc: Graphics.Context, prim: Primitive, screenCS: CoordSystem];
BlockFileout: PROC [f: IO.STREAM, mo: MasterObject];
BlockFilein: PROC [f: IO.STREAM, name: Rope.ROPE] RETURNS [mo: MasterObject];

CylinderMakeMasterObject: PROC [name: Rope.ROPE] RETURNS [mo: MasterObject];
CylinderBoundHedron: PROC [mo: MasterObject] RETURNS [hedron: BoundHedron];
CylinderRayCast: PROC [cameraPoint: Point2d, localRay: Ray, masterObject: REF ANY, prim: Primitive] RETURNS [class: Classification];
CylinderPreprocess: PROC [prim: Primitive, camera: Camera];
CylinderLineDraw: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
CylinderDrawNormals: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
CylinderCountSurf: PROC [masterObject: MasterObject] RETURNS [len: NAT];
CylinderCountVert: PROC [masterObject: MasterObject] RETURNS [len: NAT];
CylinderGetSurf: PROC [assembly: Assembly, camera: CoordSystem] RETURNS [psl: PlanarSurfaceList];
CylinderDrawSurf: PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera];
CylinderDrawSubBoxes: PROC [dc: Graphics.Context, prim: Primitive, screenCS: CoordSystem];
CylinderFileout: PROC [f: IO.STREAM, mo: MasterObject];
CylinderFilein: PROC [f: IO.STREAM, name: Rope.ROPE] RETURNS [mo: MasterObject];

ConeMakeMasterObject: PROC [name: Rope.ROPE] RETURNS [mo: MasterObject];
ConeBoundHedron: PROC [mo: MasterObject] RETURNS [hedron: BoundHedron];
ConeRayCast: PROC [cameraPoint: Point2d, localRay: Ray, masterObject: REF ANY, prim: Primitive] RETURNS [class: Classification];
ConePreprocess: PROC [prim: Primitive, camera: Camera];
ConeLineDraw: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
ConeDrawNormals: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
ConeCountSurf: PROC [masterObject: MasterObject] RETURNS [len: NAT];
ConeCountVert: PROC [masterObject: MasterObject] RETURNS [len: NAT];
ConeGetSurf: PROC [assembly: Assembly, camera: CoordSystem] RETURNS [psl: PlanarSurfaceList];
ConeDrawSurf: PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera];
ConeDrawSubBoxes: PROC [dc: Graphics.Context, prim: Primitive, screenCS: CoordSystem];
ConeFileout: PROC [f: IO.STREAM, mo: MasterObject];
ConeFilein: PROC [f: IO.STREAM, name: Rope.ROPE] RETURNS [mo: MasterObject];

TorusBoundHedron: PROC [mo: MasterObject] RETURNS [hedron: BoundHedron];
TorusRayCast: PROC [cameraPoint: Point2d, localRay: Ray, masterObject: REF ANY, prim: Primitive] RETURNS [class: Classification];
TorusPreprocess: PROC [prim: Primitive, camera: Camera];
TorusLineDraw: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
TorusDrawNormals: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
TorusCountSurf: PROC [masterObject: MasterObject] RETURNS [len: NAT];
TorusCountVert: PROC [masterObject: MasterObject] RETURNS [len: NAT];
TorusGetSurf: PROC [assembly: Assembly, camera: CoordSystem] RETURNS [psl: PlanarSurfaceList];
TorusDrawSurf: PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera];
TorusDrawSubBoxes: PROC [dc: Graphics.Context, prim: Primitive, screenCS: CoordSystem];
TorusFileout: PROC [f: IO.STREAM, mo: MasterObject];
TorusFilein: PROC [f: IO.STREAM, name: Rope.ROPE] RETURNS [mo: MasterObject];

LinSweepBoundHedron: PROC [mo: MasterObject] RETURNS [hedron: BoundHedron];
LinSweepRayCast: PROC [cameraPoint: Point2d, localRay: Ray, masterObject: REF ANY, prim: Primitive] RETURNS [class: Classification];
LinSweepPreprocess: PROC [prim: Primitive, camera: Camera];
LinSweepLineDraw: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
LinSweepDrawNormals: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
LinSweepCountSurf: PROC [masterObject: MasterObject] RETURNS [len: NAT];
LinSweepCountVert: PROC [masterObject: MasterObject] RETURNS [len: NAT];
LinSweepGetSurf: PROC [assembly: Assembly, camera: CoordSystem] RETURNS [psl: PlanarSurfaceList];
LinSweepDrawSurf: PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera];
LinSweepDrawSubBoxes: PROC [dc: Graphics.Context, prim: Primitive, screenCS: CoordSystem];
LinSweepFileout: PROC [f: IO.STREAM, mo: MasterObject];
LinSweepFilein: PROC [f: IO.STREAM, name: Rope.ROPE] RETURNS [mo: MasterObject];

RevoSweepBoundHedron: PROC [mo: MasterObject] RETURNS [hedron: BoundHedron];
RevoSweepRayCast: PROC [cameraPoint: Point2d, localRay: Ray, masterObject: REF ANY, prim: Primitive] RETURNS [class: Classification];
RevoSweepPreprocess: PROC [prim: Primitive, camera: Camera];
RevoSweepLineDraw: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
RevoSweepDrawNormals: PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem];
RevoSweepCountSurf: PROC [masterObject: MasterObject] RETURNS [len: NAT];
RevoSweepCountVert: PROC [masterObject: MasterObject] RETURNS [len: NAT];
RevoSweepGetSurf: PROC [assembly: Assembly, camera: CoordSystem] RETURNS [psl: PlanarSurfaceList];
RevoSweepDrawSurf: PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera];
RevoSweepDrawSubBoxes: PROC [dc: Graphics.Context, prim: Primitive, screenCS: CoordSystem];
RevoSweepFileout: PROC [f: IO.STREAM, mo: MasterObject];
RevoSweepFilein: PROC [f: IO.STREAM, name: Rope.ROPE] RETURNS [mo: MasterObject];
Ê	™��–
"cedar" style˜�Iheadšœ™Iprocšœ3™3Jšœ
Ïmœ1™<Lšœ…™…L˜�šÏk	˜	Lšœ	˜	Lšžœ˜Lšœ˜Lšœ˜Lšœ˜Lšœ
˜
Lšœ˜Lšœ
˜
Lšœ˜—L˜�Lšœžœ˜Lšž˜˜�Lšœ
žœ˜'Lšœ
žœ˜-Lšœžœ˜#Lšœžœ˜2Lšœ
žœ˜-Lšœžœ˜,Lšœžœ ˜5Lšœžœ˜/Lšœžœ˜1Lšœžœ"˜9Lšœ	žœ˜Lšœžœ˜'Lšœžœ˜Lšœžœ˜0L˜�L˜�Lšœ™—˜�Lšœžœžœ˜#šœžœžœ˜Lšœžœ˜—L˜�Lšœ
žœžœ
˜!šœ
žœžœ˜Lšœ	žœ˜—L˜�Lšœ
žœžœ˜'šœžœžœ˜Lšœžœ˜—L˜�Lšœ	žœžœ˜šœžœžœ˜Lšœžœ˜—L˜�Lšœ
žœžœ
˜!šœ
žœžœ˜Lšœžœ˜Lšœžœ˜—L˜�LšœžœÏcO˜lLšœžœŸp˜ŠL˜�—L™èL˜�LšÏnœžœ
žœ
žœžœžœ˜oLš œžœ
žœžœ˜aš œžœ
žœžœ˜dL˜�Lš œžœ
žœžœ™JLš œžœžœ™LLš
 
œžœ5žœžœžœ™‚Lš œžœ#™9Lš œžœžœžœ(™`Lš œžœžœžœ(™cLš œžœžœžœ™FLš œžœžœžœ™FLš 
œžœ+žœ™_Lš œžœZ™nLš œžœ@™XLš 
œžœžœžœ™5Lš œžœžœžœ
žœžœ™NL™�Lš œžœ
žœžœ™ILš œžœžœ™KLš
 œžœ5žœžœžœ™Lš œžœ#™8Lš 
œžœžœžœ(™_Lš œžœžœžœ(™bLš œžœžœžœ™ELš œžœžœžœ™ELš œžœ+žœ™^Lš 
œžœZ™mLš œžœ@™WLš œžœžœžœ™4Lš œžœžœžœ
žœžœ™ML™�Lš œžœ
žœžœ™LLš œžœžœ™KLš
 œžœ5žœžœžœ™„Lš œžœ#™;Lš œžœžœžœ(™bLš œžœžœžœ(™eLš œžœžœžœ™HLš œžœžœžœ™HLš œžœ+žœ™aLš œžœZ™pLš œžœ@™ZLš œžœžœžœ™7Lš œžœžœžœ
žœžœ™PL™�Lš œžœ
žœžœ™HLš œžœžœ™GLš
 œžœ5žœžœžœ™€Lš œžœ#™7Lš œžœžœžœ(™^Lš œžœžœžœ(™aLš 
œžœžœžœ™DLš 
œžœžœžœ™DLš œžœ+žœ™]Lš œžœZ™lLš œžœ@™VLš œžœžœžœ™3Lš 
œžœžœžœ
žœžœ™LL™�Lš œžœžœ™HLš
 œžœ5žœžœžœ™Lš œžœ#™8Lš 
œžœžœžœ(™_Lš œžœžœžœ(™bLš œžœžœžœ™ELš œžœžœžœ™ELš œžœ+žœ™^Lš 
œžœZ™mLš œžœ@™WLš œžœžœžœ™4Lš œžœžœžœ
žœžœ™ML™�Lš œžœžœ™KLš
 œžœ5žœžœžœ™„Lš œžœ#™;Lš œžœžœžœ(™bLš œžœžœžœ(™eLš œžœžœžœ™HLš œžœžœžœ™HLš œžœ+žœ™aLš œžœZ™pLš œžœ@™ZLš œžœžœžœ™7Lš œžœžœžœ
žœžœ™PL™�Lš œžœžœ™LLš
 œžœ5žœžœžœ™…Lš œžœ#™<Lš œžœžœžœ(™cLš œžœžœžœ(™fLš œžœžœžœ™ILš œžœžœžœ™ILš œžœ+žœ™bLš œžœZ™qLš œžœ@™[Lš œžœžœžœ™8Lš œžœžœžœ
žœžœ™Q—L˜�L˜�Lšžœ˜—�…—����ô��0%��