blob: 5a98083473f5a5f1a8b7befd55a361bb2e904af5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Denis M. Kishenko
* @version $Revision$
*/
package java.awt.geom;
/**
* The Interface PathIterator represents an iterator object that can
* be used to traverse the outline of a {@link java.awt.Shape}.
* It returns points along the boundary of the Shape
* which may be actual vertices (in the case of a shape made of line
* segments) or may be points on a curved segment with the distance
* between the points determined by a chosen flattening factor.
* <p>
* If the shape is closed, the outline is traversed in the counter-clockwise
* direction. That means that moving forward along the boundary is to travel
* in such a way that the interior of the shape is to the left of the
* outline path and the exterior of the shape is to the right of the outline
* path. The interior and exterior of the shape are determined by a
* winding rule.
*/
public interface PathIterator {
/** The Constant WIND_EVEN_ODD indicates the winding rule that says
* that a point is outside the shape if any infinite ray from the point
* crosses the outline of the shape an even number of times, otherwise
* it is inside. */
public static final int WIND_EVEN_ODD = 0;
/** The Constant WIND_NON_ZERO indicates the winding rule that says that
* a point is inside the shape if every infinite ray starting from that
* point crosses the outline of the shape a non-zero number of times. */
public static final int WIND_NON_ZERO = 1;
/** The Constant SEG_MOVETO indicates that to follow the shape's outline
* from the previous point to the current point, the cursor (traversal
* point) should be placed directly on the current point. */
public static final int SEG_MOVETO = 0;
/** The Constant SEG_LINETO indicates that to follow the shape's outline
* from the previous point to the current point, the cursor (traversal
* point) should follow a straight line. */
public static final int SEG_LINETO = 1;
/** The Constant SEG_QUADTO indicates that to follow the shape's outline
* from the previous point to the current point, the cursor (traversal
* point) should follow a quadratic curve. */
public static final int SEG_QUADTO = 2;
/** The Constant SEG_CUBICTO indicates that to follow the shape's outline
* from the previous point to the current point, the cursor (traversal
* point) should follow a cubic curve. */
public static final int SEG_CUBICTO = 3;
/** The Constant SEG_CLOSE indicates that the previous point was the end
* of the shape's outline. */
public static final int SEG_CLOSE = 4;
/**
* Gets the winding rule, either {@link PathIterator#WIND_EVEN_ODD} or
* {@link PathIterator#WIND_NON_ZERO}.
*
* @return the winding rule
*/
public int getWindingRule();
/**
* Checks if this PathIterator has been completely traversed.
*
* @return true, if this PathIterator has been completely traversed
*/
public boolean isDone();
/**
* Tells this PathIterator to skip to the next segment.
*/
public void next();
/**
* Gets the coordinates of the next vertex point along the shape's outline
* and a flag that indicates what kind of segment to use in order to
* connect the previous vertex point to the current vertex point to form
* the current segment.
*
* @param coords the array that the coordinates of the end point of the current
* segment are written into.
*
* @return the flag that indicates how to follow the shape's outline
* from the previous point to the current one, chosen from
* the following constants:
* {@link PathIterator#SEG_MOVETO}, {@link PathIterator#SEG_LINETO},
* {@link PathIterator#SEG_QUADTO}, {@link PathIterator#SEG_CUBICTO},
* or {@link PathIterator#SEG_CLOSE}
*/
public int currentSegment(float[] coords);
/**
* Gets the coordinates of the next vertex point along the shape's outline
* and a flag that indicates what kind of segment to use in order to
* connect the previous vertex point to the current vertex point to form
* the current segment.
*
* @param coords the array that the coordinates of the end point of the current
* segment are written into.
*
* @return the flag that indicates how to follow the shape's outline
* from the previous point to the current one, chosen from
* the following constants:
* {@link PathIterator#SEG_MOVETO}, {@link PathIterator#SEG_LINETO},
* {@link PathIterator#SEG_QUADTO}, {@link PathIterator#SEG_CUBICTO},
* or {@link PathIterator#SEG_CLOSE}
*/
public int currentSegment(double[] coords);
}