PathIterator
interface PathIterator : Iterator<PathSegment>
A path iterator can be used to iterate over all the segments
that make up a path.
Those segments may in turn define multiple contours inside the path.
The handling of conic segments is defined by the conicEvaluation
property. When set to
AsConic
, conic segments are preserved, but when set to
AsConic
, conic segments are approximated using 1 or more
quadratic segments. The error of the approximation is controlled by tolerance
.
Properties
val path: Path
The Path
this iterator iterates on.
val conicEvaluation: ConicEvaluation
Indicates whether conic segments, when present, are preserved as-is or converted to quadratic
segments, using an approximation whose error is controlled by tolerance
.
val tolerance: Float
Error of the approximation used to evaluate conic segments if they are converted to
quadratics. The error is defined as the maximum distance between the original conic segment
and its quadratic approximation. See conicEvaluation
.
Functions
fun calculateSize(includeConvertedConics: Boolean = true): Int
Returns the number of verbs present in this iterator, i.e. the number of calls to next
required to complete the iteration.
By default, calculateSize
returns the true number of operations in the iterator. Deriving
this result requires converting any conics to quadratics, if conicEvaluation
is set to
ConicEvaluation.AsQuadratics
, which takes extra processing time. Set
includeConvertedConics
to false if an approximate size, not including conic conversion, is
sufficient.
Parameters
includeConvertedConics | The returned size includes any required conic conversions. Default is true, so it will return the exact size, at the cost of iterating through all elements and converting any conics as appropriate. Set to false to save on processing, at the cost of a less exact result. |
override fun hasNext(): Boolean
Returns true
if the iteration has more elements.
fun next(outPoints: FloatArray, offset: Int = 0): PathSegment.Type
Returns the type
of the next path segment
in the iteration
and fills outPoints
with the points specific to the segment type. Each pair of floats in
the outPoints
array represents a point for the given segment. The number of pairs of floats
depends on the PathSegment.Type
:
Move
: 1 pair (indices 0 to 1)Line
: 2 pairs (indices 0 to 3)Quadratic
: 3 pairs (indices 0 to 5)Conic
: 3 pairs (indices 0 to 5), and the conicweight
at index 6. The value of the last float is undefined. SeePathSegment.Type.Conic
for more detailsCubic
: 4 pairs (indices 0 to 7)Close
: 0 pairDone
: 0 pair
This method does not allocate any memory.
Parameters
outPoints | A FloatArray large enough to hold 8 floats starting at offset , throws an IllegalStateException otherwise. |
offset | Offset in outPoints where to store the result |
override fun next(): PathSegment
Returns the next path segment
in the iteration, or DoneSegment
if the
iteration is finished. To save on allocations, use the alternative next
function, which
takes a FloatArray
.