<> <> <> DIRECTORY Atom USING [PropList], Rope USING [ROPE], IO USING [STREAM], Vector2 USING [VEC], ScanConvert USING [RealSequence], Vector3d USING [Triple, Quad], ThreeDScenes USING [AllOut, ClipState, Context, NoneOut, OutCode, ShapeInstance, ShapeSequence, Vertex, VertexInfo, VertexInfoSequence]; ThreeDSurfaces: CEDAR DEFINITIONS ~ BEGIN <> Context: TYPE ~ ThreeDScenes.Context; Pair: TYPE ~ Vector2.VEC; -- [ x, y: REAL]; Triple: TYPE ~ Vector3d.Triple; -- [ x, y, z: REAL]; Quad: TYPE ~ Vector3d.Quad; -- [ x, y, z, w: REAL]; RealSequence: TYPE ~ ScanConvert.RealSequence; OutCode: TYPE ~ ThreeDScenes.OutCode; NoneOut: OutCode ~ ThreeDScenes.NoneOut; AllOut: OutCode ~ ThreeDScenes.AllOut; <> Vertex: TYPE ~ ThreeDScenes.Vertex; VertexInfo: TYPE ~ ThreeDScenes.VertexInfo; VertexInfoSequence: TYPE ~ ThreeDScenes.VertexInfoSequence; <> Patch: TYPE ~ RECORD[type: ATOM _ NIL, oneSided: BOOLEAN _ TRUE, nVtces: NAT _ 0, clipState: ClipState _ in, props: Atom.PropList _ NIL, vtx: SEQUENCE length: NAT OF VertexInfo]; <> PatchProcs: TYPE ~ RECORD[ expand: PatchExpandProc, subdivide: PatchExpandProc, display: PatchDisplayProc, displayLines: PatchDisplayProc ]; PatchSequence: TYPE ~ RECORD [SEQUENCE length: CARDINAL OF REF Patch]; PtrPatch: TYPE ~ RECORD[type: ATOM _ NIL, oneSided: BOOLEAN _ TRUE, nVtces: NAT _ 0, clipState: ClipState _ in, props: Atom.PropList _ NIL, vtxPtr: SEQUENCE length: NAT OF NAT]; PtrPatchSequence: TYPE ~ RECORD[SEQUENCE length: CARDINAL OF REF PtrPatch]; ShapePatch: TYPE ~ RECORD[shape: REF ShapeInstance, patch, next: NAT]; SortSequence: TYPE ~ RECORD[SEQUENCE length: CARDINAL OF REF ShapePatch]; <> ClipState: TYPE ~ ThreeDScenes.ClipState; ShapeInstance: TYPE ~ ThreeDScenes.ShapeInstance; <> EnableDisplay: PROC []; StopDisplay: PROC []; ShapePatchToPatch: PROC[ context: REF Context, sPatch: REF ThreeDSurfaces.ShapePatch ] RETURNS [patch: REF Patch]; <> LoadShape: PROC[shape: REF ShapeInstance, fileName: Rope.ROPE, type: ATOM _ $ConvexPolygon, insideVisible: BOOLEAN _ FALSE]; ReadPatches: PROC[ shape: REF ShapeInstance, in: IO.STREAM, nPatches: NAT, type: ATOM, insideVisible: BOOLEAN _ FALSE ]; GetPatchColors: PROC[shape: REF ShapeInstance, fileName: Rope.ROPE]; <> ClipPoly: PROC[ context: REF Context, poly: REF Patch] RETURNS [REF Patch]; GetPatchClipState: PROC[ patch: REF Patch]; <> PatchExpandProc: TYPE ~ PROC[ shape: REF ShapeInstance, patch: REF PtrPatch, limitType: ATOM, limit: REAL] RETURNS[ v: REF VertexInfoSequence, p: REF PtrPatchSequence ]; <> PatchDisplayProc: TYPE ~ PROC[ context: REF Context, patch: REF Patch, limitType: ATOM, limit: REAL, action: PROC[context: REF Context, patch: REF Patch] ]; <> ShapeExpand: PROC[ context: REF Context, shape: REF ShapeInstance, limitType: ATOM _ NIL, limit: REAL _ 0.0] RETURNS [REF ShapeInstance]; <> ShapeSubdivide: PROC[ context: REF Context, shape: REF ShapeInstance, limitType: ATOM _ NIL, limit: REAL _ 0.0] RETURNS [REF ShapeInstance]; <> RegisterSurfaceType: PROC[ context: REF Context, type: ATOM, procs: REF PatchProcs ]; <> <> BackFacing: PROC[ poly: REF Patch, useEyeSpace: BOOLEAN _ FALSE] RETURNS [BOOLEAN]; ShadePoly: PROC[ context: REF Context, poly: REF Patch]; GetShades: PROC[context: REF Context, shape: REF ShapeInstance]; GetPolyNormals: PROC[shape: REF ShapeInstance]; GetVtxNormals: PROC[shape: REF ShapeInstance]; <> LoadSortSequence: PROC[context: REF Context, buckets: REF SortSequence _ NIL] RETURNS[REF SortSequence]; << This builds a back-to-front ordered sequence of patch references >> <> DoBackToFront: PROC[ context: REF Context, sortSeq: REF SortSequence, action: PROC[REF ShapePatch]]; DoFrontToBack: PROC[ context: REF Context, sortSeq: REF SortSequence, action: PROC[REF ShapePatch]]; DoForPatches: PROC[context: REF Context, set: REF ThreeDScenes.ShapeSequence, patchAction: PROC[REF ShapePatch], shapeAction: PROC[REF ThreeDScenes.ShapeInstance]]; <> ShowObjects: PROC[ context: REF Context, frontToBack: BOOLEAN _ FALSE ]; ShowWireFrameObjects: PROC[context: REF Context]; << These scan convert an individual patch>> OutputPatchEdges: PROC[context: REF Context, patch: REF Patch]; OutputPatch: PROC[context: REF Context, patch: REF Patch]; END.