public class FlatteningPathIterator extends Object implements PathIterator
PathIterator.SEG_MOVETO
, PathIterator.SEG_LINETO
, and PathIterator.SEG_CLOSE
.
The accuracy of the approximation is determined by two parameters:
QuadCurve2D.getFlatness()
and CubicCurve2D.getFlatness()
for drawings which illustrate the
meaning of flatness.PathIterator.SEG_LINETO
segments will be created.Memory Efficiency: The memory consumption grows linearly with the recursion limit. Neither the flatness parameter nor the number of segments in the flattened path will affect the memory consumption.
Thread Safety: Multiple threads can safely work on separate instances of this class. However, multiple threads should not concurrently access the same instance, as no synchronization is performed.
SEG_CLOSE, SEG_CUBICTO, SEG_LINETO, SEG_MOVETO, SEG_QUADTO, WIND_EVEN_ODD, WIND_NON_ZERO
Constructor and Description |
---|
FlatteningPathIterator(PathIterator src,
double flatness)
Constructs a new PathIterator for approximating an input
PathIterator with straight lines.
|
FlatteningPathIterator(PathIterator src,
double flatness,
int limit)
Constructs a new PathIterator for approximating an input
PathIterator with straight lines.
|
Modifier and Type | Method and Description |
---|---|
int |
currentSegment(double[] coords)
Returns the coordinates of the next point(s), as well as the type of
line segment.
|
int |
currentSegment(float[] coords)
Returns the coordinates of the next point(s), as well as the type of
line segment.
|
double |
getFlatness()
Returns the maximally acceptable flatness.
|
int |
getRecursionLimit()
Returns the maximum number of recursive curve subdivisions.
|
int |
getWindingRule()
Returns the winding rule to determine which points are inside this path.
|
boolean |
isDone()
Tests if the iterator is exhausted.
|
void |
next()
Advance to the next segment in the iteration.
|
public FlatteningPathIterator(PathIterator src, double flatness)
There will not be more than 10 nested recursion steps, which
means that a single SEG_QUADTO
or
SEG_CUBICTO
segment is approximated by at most
210 = 1024 straight lines.
public FlatteningPathIterator(PathIterator src, double flatness, int limit)
public double getFlatness()
public int getRecursionLimit()
public int getWindingRule()
PathIterator
getWindingRule
in interface PathIterator
PathIterator.WIND_EVEN_ODD
,
PathIterator.WIND_NON_ZERO
public boolean isDone()
PathIterator
isDone
in interface PathIterator
public void next()
PathIterator
next
in interface PathIterator
public int currentSegment(double[] coords)
PathIterator
currentSegment
in interface PathIterator
coords
- the array to place the point coordinates inPathIterator.SEG_MOVETO
,
PathIterator.SEG_LINETO
,
PathIterator.SEG_QUADTO
,
PathIterator.SEG_CUBICTO
,
PathIterator.SEG_CLOSE
public int currentSegment(float[] coords)
PathIterator
currentSegment
in interface PathIterator
coords
- the array to place the point coordinates inPathIterator.SEG_MOVETO
,
PathIterator.SEG_LINETO
,
PathIterator.SEG_QUADTO
,
PathIterator.SEG_CUBICTO
,
PathIterator.SEG_CLOSE