Class ConditionalPathIterator3D

java.lang.Object
org.bzdev.geom.ConditionalPathIterator3D
All Implemented Interfaces:
PathIterator3D

public class ConditionalPathIterator3D extends Object implements PathIterator3D
Conditional path iterator class for three dimensions. This iterator adds segments to the segments returned by another path iterator by splitting quadratic and cubic Bézier-curve segments unless the points along a segment fails to satisfy a condition that indicates that splitting should continue. If that condition is not satisfied, splitting may continue in some circumstances: the second control point, for example, should not be closer to the initial control point than the first control point. The condition is a predicate whose argument is a control point array including the end points of a segment. It will have a length of 9 for qudratic segments and a length of 12 for cubic segments.

The iterator has a recursion limit (the default value is 10) to prevent the number of segments from becoming excessively large. Incrementing the recursion limit by 1 can double the number of segments from that returned by the previous limit.

The path may be partially flattened. This class does not modify segment types, unlike FlatteningPathIterator which turns quadratic and cubic segments into straight lines.

  • Constructor Details

  • Method Details

    • getCondition

      public Predicate<double[]> getCondition()
      Get the condition parameter.
      Returns:
      the condition
    • getRecursionLimit

      public int getRecursionLimit()
      Get the recursion limit.
      Returns:
      the recursion limit
    • currentSegment

      public int currentSegment(double[] coords)
      Description copied from interface: PathIterator3D
      Returns the coordinates and type of the current path segment in the iteration. The return value is the path-segment type: SEG_MOVETO, SEG_LINETO, SEG_QUADTO, SEG_CUBICTO, or SEG_CLOSE. A double array of length 9 must be passed in and can be used to store the coordinates of the point(s). Each point is stored as a triplet of double x,y,z coordinates. SEG_MOVETO and SEG_LINETO types returns one point, SEG_QUADTO returns two points, SEG_CUBICTO returns 3 points and SEG_CLOSE does not return any points.
      Specified by:
      currentSegment in interface PathIterator3D
      Parameters:
      coords - - an array that holds the data returned from this method
      Returns:
      he path-segment type of the current path segment
    • currentSegment

      public int currentSegment(float[] coords)
      Description copied from interface: PathIterator3D
      Returns the coordinates and type of the current path segment in the iteration. The return value is the path-segment type: SEG_MOVETO, SEG_LINETO, SEG_QUADTO, SEG_CUBICTO, or SEG_CLOSE. A float array of length 9 must be passed in and can be used to store the coordinates of the point(s). Each point is stored as a triplet of float x,y,z coordinates. SEG_MOVETO and SEG_LINETO types returns one point, SEG_QUADTO returns two points, SEG_CUBICTO returns 3 points and SEG_CLOSE does not return any points.
      Specified by:
      currentSegment in interface PathIterator3D
      Parameters:
      coords - - an array that holds the data returned from this method
      Returns:
      the path-segment type of the current path segment.
    • isDone

      public boolean isDone()
      Description copied from interface: PathIterator3D
      Tests if the iteration is complete.
      Specified by:
      isDone in interface PathIterator3D
      Returns:
      true if all the segments have been read; false otherwise.
    • next

      public void next()
      Description copied from interface: PathIterator3D
      Moves the iterator to the next segment of the path forwards along the primary direction of traversal as long as there are more points in that direction.
      Specified by:
      next in interface PathIterator3D