19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this work for additional information regarding copyright ownership. 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (the "License"); you may not use this file except in compliance with 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License. You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author Denis M. Kishenko 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @version $Revision$ 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage java.awt.geom; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Interface PathIterator represents an iterator object that can be used to 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * traverse the outline of a {@link java.awt.Shape}. It returns points along the 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * boundary of the Shape which may be actual vertices (in the case of a shape 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * made of line segments) or may be points on a curved segment with the distance 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between the points determined by a chosen flattening factor. 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the shape is closed, the outline is traversed in the counter-clockwise 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * direction. That means that moving forward along the boundary is to travel in 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * such a way that the interior of the shape is to the left of the outline path 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the exterior of the shape is to the right of the outline path. The 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interior and exterior of the shape are determined by a winding rule. 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic interface PathIterator { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant WIND_EVEN_ODD indicates the winding rule that says that a 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point is outside the shape if any infinite ray from the point crosses the 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * outline of the shape an even number of times, otherwise it is inside. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WIND_EVEN_ODD = 0; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant WIND_NON_ZERO indicates the winding rule that says that a 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point is inside the shape if every infinite ray starting from that point 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * crosses the outline of the shape a non-zero number of times. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WIND_NON_ZERO = 1; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant SEG_MOVETO indicates that to follow the shape's outline from 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the previous point to the current point, the cursor (traversal point) 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should be placed directly on the current point. 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SEG_MOVETO = 0; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant SEG_LINETO indicates that to follow the shape's outline from 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the previous point to the current point, the cursor (traversal point) 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should follow a straight line. 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SEG_LINETO = 1; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant SEG_QUADTO indicates that to follow the shape's outline from 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the previous point to the current point, the cursor (traversal point) 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should follow a quadratic curve. 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SEG_QUADTO = 2; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant SEG_CUBICTO indicates that to follow the shape's outline 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from the previous point to the current point, the cursor (traversal 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point) should follow a cubic curve. 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SEG_CUBICTO = 3; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant SEG_CLOSE indicates that the previous point was the end of 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the shape's outline. 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SEG_CLOSE = 4; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the winding rule, either {@link PathIterator#WIND_EVEN_ODD} or 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PathIterator#WIND_NON_ZERO}. 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the winding rule. 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getWindingRule(); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks if this PathIterator has been completely traversed. 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if this PathIterator has been completely traversed. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isDone(); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tells this PathIterator to skip to the next segment. 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void next(); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the coordinates of the next vertex point along the shape's outline 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and a flag that indicates what kind of segment to use in order to connect 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the previous vertex point to the current vertex point to form the current 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * segment. 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param coords 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the array that the coordinates of the end point of the current 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * segment are written into. 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the flag that indicates how to follow the shape's outline from 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the previous point to the current one, chosen from the following 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constants: {@link PathIterator#SEG_MOVETO}, 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PathIterator#SEG_LINETO}, {@link PathIterator#SEG_QUADTO}, 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PathIterator#SEG_CUBICTO}, or 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PathIterator#SEG_CLOSE}. 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int currentSegment(float[] coords); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the coordinates of the next vertex point along the shape's outline 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and a flag that indicates what kind of segment to use in order to connect 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the previous vertex point to the current vertex point to form the current 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * segment. 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param coords 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the array that the coordinates of the end point of the current 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * segment are written into. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the flag that indicates how to follow the shape's outline from 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the previous point to the current one, chosen from the following 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constants: {@link PathIterator#SEG_MOVETO}, 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PathIterator#SEG_LINETO}, {@link PathIterator#SEG_QUADTO}, 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PathIterator#SEG_CUBICTO}, or 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PathIterator#SEG_CLOSE}. 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int currentSegment(double[] coords); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 147