--File: MergeDefs.mesa
-- Written by Maureen Stone, October 1980
-- based on Polygon, Written by Martin Newell, May 1980
-- Last updated: October 31, 1980 6:32 PM
DIRECTORY
PointDefs: FROM "PointDefs";
MergeDefs: DEFINITIONS =
BEGIN
AreaDescriptor: TYPE = POINTER TO AreaBlock;
AreaCreate: PUBLIC PROCEDURE RETURNS[area: AreaDescriptor];
-- Create new polygon
AreaNewBox: PUBLIC PROCEDURE[area: AreaDescriptor,
tl,br: PointDefs.ScrPt,z: INTEGER];
-- Add box to area
AreaGenerate: PUBLIC PROCEDURE[area: AreaDescriptor,
outputBox: PROCEDURE[tl,br: PointDefs.ScrPt, z: INTEGER]];
-- Generate the area defined up to last AreaNewBox
-- This procedure AreaDestroys the area, which therefore is no longer valid
AreaDestroy: PUBLIC PROCEDURE[area: AreaDescriptor];
-- Destroy area
-- Internal types
Edge: TYPE = POINTER TO EdgeRecord;
EdgeRecord: TYPE = RECORD[
next: Edge,
x: INTEGER,
ystart: INTEGER,
yend: INTEGER,
z: INTEGER,--an indication of overlap order. z constant for whole box
lastouty: INTEGER,--y value where edge of deferred box was last output
mate: Edge,--other edge making up a deferred box
up: BOOLEAN,--TRUE if edge defined in increasing y
flagout: BOOLEAN--TRUE if edge will need to be output at ycurr
];
AreaBlock: TYPE = RECORD[
edgeList: Edge,--unprocessed edges
edgeListEl: Edge,--last edge added to EdgeList
activeList: Edge--edges being processed
];
END.