Package com.esri.core.geometry
Class SimpleRasterizer
- java.lang.Object
-
- com.esri.core.geometry.SimpleRasterizer
-
public class SimpleRasterizer extends java.lang.Object
Simple scanline rasterizer. Caller provides a callback to draw pixels to actual surface.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
SimpleRasterizer.Edge
private static class
SimpleRasterizer.EdgeComparator
static interface
SimpleRasterizer.ScanCallback
-
Field Summary
Fields Modifier and Type Field Description private SimpleRasterizer.Edge
activeEdgesTable_
private SimpleRasterizer.ScanCallback
callback_
private static SimpleRasterizer.EdgeComparator
edgeCompare_
static int
EVEN_ODD
Even odd fill ruleprivate boolean
evenOdd_
private int
height_
private int
maxY_
private int
minY_
private int
numEdges_
private int[]
scanBuffer_
(package private) int
scanPtr_
private SimpleRasterizer.Edge[]
sortBuffer_
private int
sortedNum_
private int
width_
static int
WINDING
Winding fill ruleprivate SimpleRasterizer.Edge[]
ySortedEdges_
-
Constructor Summary
Constructors Constructor Description SimpleRasterizer()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addEdge(double x1, double y1, double x2, double y2)
Add a single edge.private void
addNewEdgesToAET_(int y)
void
addRing(double[] xy)
Adds edges of the ring to the rasterizer.(package private) boolean
addSegmentStroke(double x1, double y1, double x2, double y2, double half_width, boolean skip_short, double[] helper_xy_10_elm)
void
addTriangle(double x1, double y1, double x2, double y2, double x3, double y3)
Adds edges of a triangle.private void
advanceAET_()
private void
emitScans_()
long
estimateMemorySize()
void
fillEnvelope(Envelope2D envIn)
void
flush()
Flushes any cached scans.int
getHeight()
SimpleRasterizer.ScanCallback
getScanCallback()
int
getWidth()
void
renderEdges(int fillMode)
Renders all edges added so far, and removes them.void
setup(int width, int height, SimpleRasterizer.ScanCallback callback)
Sets up the rasterizer.private static int
snap_(int x, int mi, int ma)
private SimpleRasterizer.Edge
sortAET_(SimpleRasterizer.Edge aet)
void
startAddingEdges()
Call before starting the edges.
-
-
-
Field Detail
-
EVEN_ODD
public static final int EVEN_ODD
Even odd fill rule- See Also:
- Constant Field Values
-
WINDING
public static final int WINDING
Winding fill rule- See Also:
- Constant Field Values
-
edgeCompare_
private static final SimpleRasterizer.EdgeComparator edgeCompare_
-
activeEdgesTable_
private SimpleRasterizer.Edge activeEdgesTable_
-
ySortedEdges_
private SimpleRasterizer.Edge[] ySortedEdges_
-
sortBuffer_
private SimpleRasterizer.Edge[] sortBuffer_
-
scanBuffer_
private int[] scanBuffer_
-
scanPtr_
int scanPtr_
-
callback_
private SimpleRasterizer.ScanCallback callback_
-
width_
private int width_
-
height_
private int height_
-
minY_
private int minY_
-
maxY_
private int maxY_
-
numEdges_
private int numEdges_
-
sortedNum_
private int sortedNum_
-
evenOdd_
private boolean evenOdd_
-
-
Method Detail
-
setup
public void setup(int width, int height, SimpleRasterizer.ScanCallback callback)
Sets up the rasterizer.
-
getWidth
public final int getWidth()
-
getHeight
public final int getHeight()
-
flush
public final void flush()
Flushes any cached scans.
-
addTriangle
public final void addTriangle(double x1, double y1, double x2, double y2, double x3, double y3)
Adds edges of a triangle.
-
addRing
public final void addRing(double[] xy)
Adds edges of the ring to the rasterizer.- Parameters:
xy
- interleaved coordinates x1, y1, x2, y2,...
-
startAddingEdges
public final void startAddingEdges()
Call before starting the edges. For example to render two polygons that consist of a single ring: startAddingEdges(); addRing(...); renderEdges(Rasterizer.EVEN_ODD); addRing(...); renderEdges(Rasterizer.EVEN_ODD); For example to render a polygon consisting of three rings: startAddingEdges(); addRing(...); addRing(...); addRing(...); renderEdges(Rasterizer.EVEN_ODD);
-
renderEdges
public final void renderEdges(int fillMode)
Renders all edges added so far, and removes them. Calls startAddingEdges after it's done.- Parameters:
fillMode
- Fill mode for the polygon fill can be one of two values: EVEN_ODD or WINDING. Note, as any other graphics algorithm, the scan line rasterizer doesn't require polygons to be topologically simple, or have correct ring orientation.
-
addEdge
public final void addEdge(double x1, double y1, double x2, double y2)
Add a single edge.- Parameters:
x1
-y1
-x2
-y2
-
-
fillEnvelope
public final void fillEnvelope(Envelope2D envIn)
-
addSegmentStroke
final boolean addSegmentStroke(double x1, double y1, double x2, double y2, double half_width, boolean skip_short, double[] helper_xy_10_elm)
-
getScanCallback
public final SimpleRasterizer.ScanCallback getScanCallback()
-
estimateMemorySize
public long estimateMemorySize()
-
advanceAET_
private final void advanceAET_()
-
addNewEdgesToAET_
private final void addNewEdgesToAET_(int y)
-
snap_
private static int snap_(int x, int mi, int ma)
-
emitScans_
private final void emitScans_()
-
sortAET_
private final SimpleRasterizer.Edge sortAET_(SimpleRasterizer.Edge aet)
-
-