ImagerScanConverterPrivate.mesa
Copyright Ó 1988, 1990, 1991 by Xerox Corporation. All rights reserved.
Michael Plass, May 28, 1992 9:32 am PDT
~
BEGIN
Pair: TYPE ~ ImagerScanConverter.Pair;
RealBox:
TYPE ~
RECORD [min, max: Pair ¬ [0, 0]];
ExternalHalfPlane: TYPE ~ {sLo, sHi, fLo, fHi};
Region:
TYPE ~
PACKED
ARRAY ExternalHalfPlane
OF
BOOL;
AreaState: TYPE ~ {nil, awaitMove, awaitLine, complete, completeMonotone};
Edge: TYPE ~ REF EdgeRep;
Edges: TYPE ~ REF EdgeRep;
EdgeRep:
TYPE ~
RECORD [
sMin: INTEGER, -- First scan line touched
sCount: NAT, -- Number of scan lines touched
f0: Scaled.Value, -- Initial value of f
df: Scaled.Value, -- df/ds
wrapDelta: INTEGER, -- for wrap computation
link: REF EdgeRep
];
Area: TYPE ~ REF AreaRep;
AreaRep:
TYPE ~
RECORD [
bounds: SF.Box, -- For clipping as the area is built
realBounds: RealBox, -- Floating-point version of same
tightBounds: SF.Box, -- Computed bounding box of area
state: AreaState, -- Indicates state of outline
moveCount: INT, -- Number of MoveTo calls
firstPt: Pair, -- Argument of most recent MoveTo
firstRegion: Region, -- Region of most recent MoveTo
lastPt: Pair, -- Most recent point inserted
lastRegion: Region, -- Region of lastPt
totalCrossings: INT, -- Total number of scan-line crossings
increasingEdges: Edges, -- Edges that were increasing in s
decreasingEdges: Edges, -- Edges that were decreasing in s
freeEdges: Edges, -- Avail list of edges for reuse
mode: INTEGER, -- Scan conversion mode
tolerance: REAL, -- For subdividing curves
cLimit: INTEGER, -- For bounding worst-case subdivisions (curve, conic)
pLimit: INTEGER -- For bounding worst-case subdivisions (parabola)
];