RESandPixelMap.mesa
Copyright © 1984 by Xerox Corporation. All rights reserved.
Last Edited by: May 4, 1985 9:42:42 am PDT
Crow, August 17, 1987 10:35:51 am PDT
DIRECTORY
ThreeDBasics  USING [Context],
ImagerPixel   USING [PixelMap],
Rope     USING [ROPE];
RESandPixelMap: CEDAR DEFINITIONS
~ BEGIN
Basic Types
FrameSequence: TYPE ~ RECORD[ currentFrame: NAT ← 0, length: NAT,
          frames: SEQUENCE maxLength: NAT OF ImagerPixel.PixelMap ];
Procedures for Animation - These build sequences of AIS files and play them back
PlayBackNumberedRESFiles: PROC[context: REF ThreeDBasics.Context, fileRoot : Rope.ROPE,
         startNum, numFiles, framesPerSec, secondsPlayingTime : NAT];
Plays back a sequenced set of AIS files, cycling through the files ad nauseum
- startNum specifies the first image in the sequence to display
- numFiles specifies the number of different images to be displayed
- framesPerSec ranges from 1 up to 30 (performance is limited by bitblt speed)
- secondsPlayingTime limits the running time
StoreFiles: PROC[context: REF ThreeDBasics.Context, fileRoot: Rope.ROPE, number: NAT];
Stores image on display in named file(s), sequence number is added to file name
CacheRESFiles: PROC[context: REF ThreeDBasics.Context, fileOfNames: Rope.ROPE,
       frames: REF FrameSequence ← NIL]
     RETURNS[REF FrameSequence];
Stores a cache of images, named in a file of ROPEs, in memory for playback. Returns a handle to the cache
CacheNumberedRESFiles: PROC[context: REF ThreeDBasics.Context, fileRoot: Rope.ROPE,
           numFiles: NAT, start: NAT ← 0]
        RETURNS[REF FrameSequence];
Stores a cache of images, with sequentially numbered file names, in memory for flexible playback. Returns a handle to the cache. File names of the form: name0.ais, name1.ais, name64.ais, etc. Start indicates file name to begin sequence with.
PlayBackFrameCache: PROC[context: REF ThreeDBasics.Context, frames: REF FrameSequence,
         framesPerSec, secondsPlayingTime: NAT,
         bothWays: BOOLEANFALSE, startNum: NAT ← 0];
Plays back a cached set of images as above, will cycle through the sequence or run back and forth over the sequence if bothWays is set TRUE, the playback may be started in midsequence if startNum is nonzero
ShowNextCachedFrame: PROC[context: REF ThreeDBasics.Context,
          frames: REF FrameSequence, framesPerSec: INTEGER ← 0];
Shows next frame in sequence, delaying enough time to ensure framesPerSec not exceeded, handy for interactive control of frame rate, negative framesPerSec shows previous frame
Support Procedures
PasteInSequenceNo: PROC[fileRoot: Rope.ROPE, number: NAT] RETURNS[Rope.ROPE];
Adds number to the file name, sticking it in just before the extension, for sequencing
ShowCachedFrame: PROC[context: REF ThreeDBasics.Context, frames: REF FrameSequence];
Shows the specified frame from a frame sequence cached in VM
The following loadAIS files into a displayed context without resampling.
- If the stored image has more pixels than the display, part will be clipped.
- If the stored image has fewer pixels than the display, an unwritten border will be left around the displayed image.
- xOffset moves the displayed to the right if positive, otherwise left (units are pixels)
- yOffset moves the displayed up if positive, otherwise down
GetRES: PROC[ context: REF ThreeDBasics.Context, fileRoot: Rope.ROPE,
     xOffset, yOffset: INTEGER ← 0, center: BOOLEANTRUE ]
   RETURNS
[ xSize, ySize: INTEGER];
Reads AIS file(s) to match context.display. Searches for appropriate file names,
eg. file-red.ais, file-grn.ais, file-alpha.ais, file-depth.ais, etc.
See AISAnimationImpl.standardNames.
     
PutRES: PROC[ context: REF ThreeDBasics.Context, fileRoot: Rope.ROPE,
     doEverything: BOOLEANFALSE ];
Writes current image in context.display out to ais file(s). IF doEverything THEN alpha and depth channels will be written out if they exist .
GetInterpress: PROC[ context: REF ThreeDBasics.Context, fileRoot: Rope.ROPE,
       xOffset, yOffset: INTEGER ← 0, center: BOOLEANTRUE ]
     RETURNS[ xSize, ySize: INTEGER];
Read image directly from interpress file(s). Unimplemented.
PutInterpress: PROC[ context: REF ThreeDBasics.Context, fileRoot: Rope.ROPE ];
Write directly to interpress file alpha and depth channels ignored. Unimpelmented
END.