Interface PathIterator


public interface PathIterator
This interface provides a directed path over the boundary of a shape. The path can contain 1st through 3rd order Bezier curves (lines, and quadratic and cubic splines). A shape can have multiple disjoint paths via the #SEG_MOVETO directive, and can close a circular path back to the previous #SEG_MOVETO via the #SEG_CLOSE directive.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    The current segment closes a loop by an implicit line to the previous #SEG_MOVETO coordinate.
    static final int
    The current segment is a cubic parametric curve (more commonly known as a Bezier curve).
    static final int
    The current segment is a line.
    static final int
    Starts a new subpath.
    static final int
    The current segment is a quadratic parametric curve.
    static final int
    The even-odd winding mode: a point is internal to the shape if a ray from the point to infinity (in any direction) crosses an odd number of segments.
    static final int
    The non-zero winding mode: a point is internal to the shape if a ray from the point to infinity (in any direction) crosses a different number of segments headed clockwise than those headed counterclockwise.
  • Method Summary

    Modifier and Type
    Method
    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.
    int
    Returns the winding rule to determine which points are inside this path.
    boolean
    Tests if the iterator is exhausted.
    void
    Advance to the next segment in the iteration.
  • Field Details

    • WIND_EVEN_ODD

      static final int WIND_EVEN_ODD
      The even-odd winding mode: a point is internal to the shape if a ray from the point to infinity (in any direction) crosses an odd number of segments.
      See Also:
    • WIND_NON_ZERO

      static final int WIND_NON_ZERO
      The non-zero winding mode: a point is internal to the shape if a ray from the point to infinity (in any direction) crosses a different number of segments headed clockwise than those headed counterclockwise.
      See Also:
    • SEG_MOVETO

      static final int SEG_MOVETO
      Starts a new subpath. There is no segment from the previous vertex.
      See Also:
    • SEG_LINETO

      static final int SEG_LINETO
      The current segment is a line.
      See Also:
    • SEG_QUADTO

      static final int SEG_QUADTO

      The current segment is a quadratic parametric curve. It is interpolated as t varies from 0 to 1 over the current point (CP), first control point (P1), and final interpolated control point (P2):

      `P(t) = B(2,0)*CP + B(2,1)*P1 + B(2,2)*P2
      0 <= t <= 1
      B(n,m) = mth coefficient of nth degree Bernstein polynomial
      = C(n,m) * t^(m) * (1 - t)^(n-m)
      C(n,m) = Combinations of n things, taken m at a time
      = n! / (m! * (n-m)!)`
      
      See Also:
    • SEG_CUBICTO

      static final int SEG_CUBICTO

      The current segment is a cubic parametric curve (more commonly known as a Bezier curve). It is interpolated as t varies from 0 to 1 over the current point (CP), first control point (P1), the second control point (P2), and final interpolated control point (P3):

      `P(t) = B(3,0)*CP + B(3,1)*P1 + B(3,2)*P2 + B(3,3)*P3
      0 <= t <= 1
      B(n,m) = mth coefficient of nth degree Bernstein polynomial
      = C(n,m) * t^(m) * (1 - t)^(n-m)
      C(n,m) = Combinations of n things, taken m at a time
      = n! / (m! * (n-m)!)`
      
      See Also:
    • SEG_CLOSE

      static final int SEG_CLOSE
      The current segment closes a loop by an implicit line to the previous #SEG_MOVETO coordinate.
      See Also:
  • Method Details

    • getWindingRule

      int getWindingRule()

      Returns the winding rule to determine which points are inside this path.

      Returns

      the winding rule. (#WIND_EVEN_ODD or #WIND_NON_ZERO).

    • isDone

      boolean isDone()

      Tests if the iterator is exhausted. If this returns true, currentSegment and next may throw a RuntimeException (although this is not required).

      Returns

      true if the iteration is complete

    • next

      void next()
      Advance to the next segment in the iteration. It is not specified what this does if called when #isDone returns true.
    • currentSegment

      int currentSegment(float[] coords)

      Returns the coordinates of the next point(s), as well as the type of line segment. The input array must be at least a float[6], to accommodate up to three (x,y) point pairs (although if you know the iterator is flat, you can probably get by with a float[2]). If the returned type is #SEG_MOVETO or #SEG_LINETO, the first point in the array is modified; if the returned type is #SEG_QUADTO, the first two points are modified; if the returned type is #SEG_CUBICTO, all three points are modified; and if the returned type is #SEG_CLOSE, the array is untouched.

      Parameters
      • coords: the array to place the point coordinates in
      Returns

      the segment type. One of (#SEG_MOVETO, #SEG_LINETO, #SEG_QUADTO, #SEG_CUBICTO, #SEG_CLOSE).

    • currentSegment

      int currentSegment(double[] coords)

      Returns the coordinates of the next point(s), as well as the type of line segment. The input array must be at least a double[6], to accommodate up to three (x,y) point pairs (although if you know the iterator is flat, you can probably get by with a double[2]). If the returned type is #SEG_MOVETO or #SEG_LINETO, the first point in the array is modified; if the returned type is #SEG_QUADTO, the first two points are modified; if the returned type is #SEG_CUBICTO, all three points are modified; and if the returned type is #SEG_CLOSE, the array is untouched.

      Parameters
      • coords: the array to place the point coordinates in
      Returns

      the segment type. One of (#SEG_MOVETO, #SEG_LINETO, #SEG_QUADTO, #SEG_CUBICTO, #SEG_CLOSE).