Package com.esri.core.geometry
Class SimpleRasterizer
- java.lang.Object
-
- com.esri.core.geometry.SimpleRasterizer
-
public class SimpleRasterizer extends java.lang.ObjectSimple 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 classSimpleRasterizer.Edgeprivate static classSimpleRasterizer.EdgeComparatorstatic interfaceSimpleRasterizer.ScanCallback
-
Field Summary
Fields Modifier and Type Field Description private SimpleRasterizer.EdgeactiveEdgesTable_private SimpleRasterizer.ScanCallbackcallback_private static SimpleRasterizer.EdgeComparatoredgeCompare_static intEVEN_ODDEven odd fill ruleprivate booleanevenOdd_private intheight_private intmaxY_private intminY_private intnumEdges_private int[]scanBuffer_(package private) intscanPtr_private SimpleRasterizer.Edge[]sortBuffer_private intsortedNum_private intwidth_static intWINDINGWinding 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 voidaddEdge(double x1, double y1, double x2, double y2)Add a single edge.private voidaddNewEdgesToAET_(int y)voidaddRing(double[] xy)Adds edges of the ring to the rasterizer.(package private) booleanaddSegmentStroke(double x1, double y1, double x2, double y2, double half_width, boolean skip_short, double[] helper_xy_10_elm)voidaddTriangle(double x1, double y1, double x2, double y2, double x3, double y3)Adds edges of a triangle.private voidadvanceAET_()private voidemitScans_()longestimateMemorySize()voidfillEnvelope(Envelope2D envIn)voidflush()Flushes any cached scans.intgetHeight()SimpleRasterizer.ScanCallbackgetScanCallback()intgetWidth()voidrenderEdges(int fillMode)Renders all edges added so far, and removes them.voidsetup(int width, int height, SimpleRasterizer.ScanCallback callback)Sets up the rasterizer.private static intsnap_(int x, int mi, int ma)private SimpleRasterizer.EdgesortAET_(SimpleRasterizer.Edge aet)voidstartAddingEdges()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)
-
-