Formatting and javadoc cleanup.

This commit is contained in:
Michael Bayne
2011-06-10 12:28:56 -07:00
parent c7d31b9ea3
commit 47e7ead916
2 changed files with 87 additions and 111 deletions
+5 -6
View File
@@ -4,6 +4,9 @@
package pythagoras.f;
/**
* Internal utility methods for computing intersections and containment.
*/
class Crossing
{
/** Return value indicating that a crossing was found. */
@@ -850,13 +853,9 @@ class Crossing
return UNKNOWN;
}
/**
* Allowable tolerance for bounds comparison
*/
/** Allowable tolerance for bounds comparison */
protected static final float DELTA = 1E-5f;
/**
* If roots have distance less then <code>ROOT_DELTA</code> they are double
*/
/** If roots have distance less then <code>ROOT_DELTA</code> they are double */
protected static final float ROOT_DELTA = 1E-10f;
}
@@ -6,88 +6,11 @@ package pythagoras.f;
import java.util.NoSuchElementException;
public class FlatteningPathIterator implements PathIterator
/**
* A path iterator that flattens curves.
*/
class FlatteningPathIterator implements PathIterator
{
/**
* The default points buffer size
*/
private static final int BUFFER_SIZE = 16;
/**
* The default curve subdivision limit
*/
private static final int BUFFER_LIMIT = 16;
/**
* The points buffer capacity
*/
private static final int BUFFER_CAPACITY = 16;
/**
* The type of current segment to be flat
*/
int bufType;
/**
* The curve subdivision limit
*/
int bufLimit;
/**
* The current points buffer size
*/
int bufSize;
/**
* The inner cursor position in points buffer
*/
int bufIndex;
/**
* The current subdivision count
*/
int bufSubdiv;
/**
* The points buffer
*/
float buf[];
/**
* The indicator of empty points buffer
*/
boolean bufEmpty = true;
/**
* The source PathIterator
*/
PathIterator p;
/**
* The flatness of new path
*/
float flatness;
/**
* The square of flatness
*/
float flatness2;
/**
* The x coordinate of previous path segment
*/
float px;
/**
* The y coordinate of previous path segment
*/
float py;
/**
* The tamporary buffer for getting points from PathIterator
*/
float coords[] = new float[6];
public FlatteningPathIterator (PathIterator path, float flatness) {
this(path, flatness, BUFFER_LIMIT);
}
@@ -119,23 +42,51 @@ public class FlatteningPathIterator implements PathIterator
return bufLimit;
}
@Override
// from interface PathIterator
public int getWindingRule () {
return p.getWindingRule();
}
@Override
// from interface PathIterator
public boolean isDone () {
return bufEmpty && p.isDone();
}
/**
* Calculates flat path points for the current segment of the source shape. Line segment is
@Override
// from interface PathIterator
public void next () {
if (bufEmpty) {
p.next();
}
}
@Override
// from interface PathIterator
public int currentSegment (float[] coords) {
if (isDone()) {
throw new NoSuchElementException("Iterator out of bounds");
}
evaluate();
int type = bufType;
if (type != SEG_CLOSE) {
coords[0] = px;
coords[1] = py;
if (type != SEG_MOVETO) {
type = SEG_LINETO;
}
}
return type;
}
/** Calculates flat path points for the current segment of the source shape. Line segment is
* flat by itself. Flatness of quad and cubic curves are evaluated by the getFlatnessSq()
* method. Curves are subdivided until current flatness is bigger than user defined value and
* subdivision limit isn't exhausted. Single source segments are translated to a series of
* buffer points. The smaller the flatness the bigger the series. Every currentSegment() call
* extracts one point from the buffer. When a series is completed, evaluate() takes the next
* source shape segment.
*/
* source shape segment. */
protected void evaluate () {
if (bufEmpty) {
bufType = p.currentSegment(coords);
@@ -232,25 +183,51 @@ public class FlatteningPathIterator implements PathIterator
}
}
public void next () {
if (bufEmpty) {
p.next();
}
}
/** The type of current segment to be flat */
private int bufType;
public int currentSegment (float[] coords) {
if (isDone()) {
throw new NoSuchElementException("Iterator out of bounds");
}
evaluate();
int type = bufType;
if (type != SEG_CLOSE) {
coords[0] = px;
coords[1] = py;
if (type != SEG_MOVETO) {
type = SEG_LINETO;
}
}
return type;
}
/** The curve subdivision limit */
private int bufLimit;
/** The current points buffer size */
private int bufSize;
/** The inner cursor position in points buffer */
private int bufIndex;
/** The current subdivision count */
private int bufSubdiv;
/** The points buffer */
private float buf[];
/** The indicator of empty points buffer */
private boolean bufEmpty = true;
/** The source PathIterator */
private PathIterator p;
/** The flatness of new path */
private float flatness;
/** The square of flatness */
private float flatness2;
/** The x coordinate of previous path segment */
private float px;
/** The y coordinate of previous path segment */
private float py;
/** The tamporary buffer for getting points from PathIterator */
private float coords[] = new float[6];
/** The default points buffer size */
private static final int BUFFER_SIZE = 16;
/** The default curve subdivision limit */
private static final int BUFFER_LIMIT = 16;
/** The points buffer capacity */
private static final int BUFFER_CAPACITY = 16;
}