-- File: SweepGeometry.mesa -- Last edited by Bier on December 18, 1982 1:19 am -- Author: Eric Allan Bier on June 9, 1982 1:21 pm -- Contents: Definitions for a package which creates and displays linear and revolute 3D structures DIRECTORY CoordSys, CSGGraphics, DisplayList3d, Graphics, Matrix3d, Shading, SV2d, SVVector3d; SweepGeometry: DEFINITIONS = BEGIN Camera: TYPE = CSGGraphics.Camera; CoordSystem: TYPE = REF CoordSysObj; CoordSysObj: TYPE = CoordSys.CoordSysObj; Path: TYPE = REF PathObj; PathObj: TYPE = SV2d.PathObj; Polygon: TYPE = REF PolygonObj; PolygonObj: TYPE = SV2d.PolygonObj; Point2d: TYPE = SV2d.Point2d; Point3d: TYPE = Matrix3d.Point3d; Vector: TYPE = SVVector3d.Vector; LinearMesh: TYPE = REF LinearMeshRecord; LinearMeshRecord: TYPE = RECORD [ len: NAT, array: LinearMeshArray, surfaces: LinearSurfaceMesh]; RevoluteMesh: TYPE = REF RevoluteMeshRecord; RevoluteMeshRecord: TYPE = RECORD [ linesOfLongitude: NAT, linesOfLatitude: NAT, array: RevoluteMeshArray, surfaces: RevoluteSurfaceMesh]; ToroidalMesh: TYPE = REF ToroidalMeshRecord; ToroidalMeshRecord: TYPE = RECORD [ linesOfLongitude: NAT, linesOfLatitude: NAT, array: RevoluteMeshArray, surfaces: ToroidalSurfaceMesh]; maxMeshLen: NAT = 30; LinearMeshArray: TYPE = ARRAY [1..maxMeshLen] OF ARRAY [1..2] OF Point3d; maxLinesOfLat: NAT = 20; maxLinesOfLong: NAT = 12; RevoluteMeshArray: TYPE = ARRAY [1..maxLinesOfLat] OF ARRAY [1..maxLinesOfLong] OF Point3d; LinearSurfaceMesh: TYPE = RECORD [ front: SweepSurface, back: SweepSurface, sides: ARRAY [1..maxMeshLen] OF SweepSurface]; RevoluteSurfaceMesh: TYPE = RECORD [ top: SweepSurface, bottom: SweepSurface, sides: ARRAY [1..maxLinesOfLat-1] OF ARRAY [1..maxLinesOfLong] OF SweepSurface]; ToroidalSurfaceMesh: TYPE = RECORD [ sides: ARRAY [1..maxLinesOfLat] OF ARRAY [1..maxLinesOfLong] OF SweepSurface]; SweepSurface: TYPE = RECORD [normal: Vector]; LightSource: TYPE = REF LightSourceObj; LightSourceObj: TYPE = Shading.LightSourceObj; LightSourceList: TYPE = LIST OF LightSource; MasterObject: TYPE = REF MasterObjectRec; MasterObjectRec: TYPE = DisplayList3d.MasterObjectRec; Assembly: TYPE = REF AssemblyObj; AssemblyObj: TYPE = DisplayList3d.AssemblyObj; PlanarSurface: TYPE = REF PlanarSurfaceObj; PlanarSurfaceObj: TYPE = DisplayList3d.PlanarSurfaceObj; PlanarSurfaceList: TYPE = DisplayList3d.PlanarSurfaceList; LinearSweep: PROC [poly: Polygon, frontDepth: REAL _ 0.5, backDepth: REAL _ -0.5] RETURNS [meshRecord: LinearMesh]; RevoluteSweep: PROC [path: Path, linesOfLongitude: NAT _ 10] RETURNS [meshRecord: RevoluteMesh]; ToroidalSweep: PROC [poly: Polygon, linesOfLongitude: NAT _ 10] RETURNS [meshRecord: ToroidalMesh]; -- Like RevoluteSweep but wraps around GetLinearPoly: PROC [linMesh: LinearMesh] RETURNS [poly: Polygon]; GetRevolutePath: PROC [revMesh: RevoluteMesh] RETURNS [path: Path]; LineDrawLinearSweep: PROC [dc: Graphics.Context, meshRecord: LinearMesh, camera: Camera, localCS: CoordSystem]; LineDrawRevoluteSweep: PROC [dc: Graphics.Context, meshRecord: RevoluteMesh, camera: Camera, localCS: CoordSystem]; LineDrawToroidalSweep: PROC [dc: Graphics.Context, meshRecord: ToroidalMesh, camera: Camera, localCS: CoordSystem]; DrawNormalsLinearSweep: PROC [dc: Graphics.Context, meshRecord: LinearMesh, camera: Camera, localCS: CoordSystem]; DrawNormalsRevoluteSweep: PROC [dc: Graphics.Context, meshRecord: RevoluteMesh, camera: Camera, localCS: CoordSystem]; DrawNormalsToroidalSweep: PROC [dc: Graphics.Context, meshRecord: ToroidalMesh, camera: Camera, localCS: CoordSystem]; PlanarSurfacesLinearSweep: PROC [meshRecord: LinearMesh, assembly: Assembly, cameraCS: CoordSystem] RETURNS [psl: PlanarSurfaceList]; PlanarSurfacesRevoluteSweep: PROC [meshRecord: RevoluteMesh, assembly: Assembly, cameraCS: CoordSystem] RETURNS [psl: PlanarSurfaceList]; PlanarSurfacesToroidalSweep: PROC [meshRecord: ToroidalMesh, assembly: Assembly, cameraCS: CoordSystem] RETURNS [psl: PlanarSurfaceList]; CountPlanarSurfacesLinearSweep: PROC [meshRecord: LinearMesh] RETURNS [len: NAT]; CountPlanarSurfacesRevoluteSweep: PROC [meshRecord: RevoluteMesh] RETURNS [len: NAT]; CountPlanarSurfacesToroidalSweep: PROC [meshRecord: ToroidalMesh] RETURNS [len: NAT]; CountVerticesLinearSweep: PROC [meshRecord: LinearMesh] RETURNS [len: NAT]; CountVerticesRevoluteSweep: PROC [meshRecord: RevoluteMesh] RETURNS [len: NAT]; CountVerticesToroidalSweep: PROC [meshRecord: ToroidalMesh] RETURNS [len: NAT]; DrawPlanarSurfaceLinearSweep: PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera]; DrawPlanarSurfaceRevoluteSweep: PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera]; DrawPlanarSurfaceToroidalSweep: PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera]; END.