Package org.apache.batik.ext.awt.geom
Class PathLength
- java.lang.Object
-
- org.apache.batik.ext.awt.geom.PathLength
-
public class PathLength extends java.lang.Object
Utilitiy class for length calculations of paths.PathLength is a utility class for calculating the length of a path, the location of a point at a particular length along the path, and the angle of the tangent to the path at a given length.
It uses a FlatteningPathIterator to create a flattened version of the Path. This means the values returned are not always exact (in fact, they rarely are), but in most cases they are reasonably accurate.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
PathLength.PathSegment
A single path segment in the flattened version of the path.protected static class
PathLength.SingleSegmentPathIterator
APathIterator
that returns only the next path segment from anotherPathIterator
.
-
Field Summary
Fields Modifier and Type Field Description protected boolean
initialised
Whether this path been flattened yet.protected java.awt.Shape
path
The path to use for calculations.protected float
pathLength
Cached copy of the path length.protected int[]
segmentIndexes
Array where the index is the index of the original path segment and the value is the index of the first of the flattened segments insegments
that corresponds to that original path segment.protected java.util.List
segments
The list of flattened path segments.
-
Constructor Summary
Constructors Constructor Description PathLength(java.awt.Shape path)
Creates a new PathLength object for the specifiedShape
.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description float
angleAtLength(float length)
Returns the slope of the path at the specified length.float
angleAtLength(int index, float proportion)
Returns the slope of the path at the specified length.int
findUpperIndex(float length)
Returns the index of the path segment that bounds the specified length along the path.float
getLengthAtSegment(int index)
Returns the length at the start of the segment given by the specified index.int
getNumberOfSegments()
Returns the number of segments in the path.java.awt.Shape
getPath()
Returns the path to use for calculations.protected void
initialise()
Flattens the path and determines the path length.float
lengthOfPath()
Returns the length of the path used by this PathLength object.java.awt.geom.Point2D
pointAtLength(float length)
Returns the point that is at the given length along the path.java.awt.geom.Point2D
pointAtLength(int index, float proportion)
Returns the point that is the given proportion along the path segment given by the specified index.int
segmentAtLength(float length)
Returns the index of the segment at the given distance along the path.void
setPath(java.awt.Shape v)
Sets the path to use for calculations.
-
-
-
Field Detail
-
path
protected java.awt.Shape path
The path to use for calculations.
-
segments
protected java.util.List segments
The list of flattened path segments.
-
segmentIndexes
protected int[] segmentIndexes
Array where the index is the index of the original path segment and the value is the index of the first of the flattened segments insegments
that corresponds to that original path segment.
-
pathLength
protected float pathLength
Cached copy of the path length.
-
initialised
protected boolean initialised
Whether this path been flattened yet.
-
-
Method Detail
-
getPath
public java.awt.Shape getPath()
Returns the path to use for calculations.- Returns:
- Path used in calculations.
-
setPath
public void setPath(java.awt.Shape v)
Sets the path to use for calculations.- Parameters:
v
- Path to be used in calculations.
-
lengthOfPath
public float lengthOfPath()
Returns the length of the path used by this PathLength object.- Returns:
- The length of the path.
-
initialise
protected void initialise()
Flattens the path and determines the path length.
-
getNumberOfSegments
public int getNumberOfSegments()
Returns the number of segments in the path.
-
getLengthAtSegment
public float getLengthAtSegment(int index)
Returns the length at the start of the segment given by the specified index.
-
segmentAtLength
public int segmentAtLength(float length)
Returns the index of the segment at the given distance along the path.
-
pointAtLength
public java.awt.geom.Point2D pointAtLength(int index, float proportion)
Returns the point that is the given proportion along the path segment given by the specified index.
-
pointAtLength
public java.awt.geom.Point2D pointAtLength(float length)
Returns the point that is at the given length along the path.- Parameters:
length
- The length along the path- Returns:
- The point at the given length
-
angleAtLength
public float angleAtLength(int index, float proportion)
Returns the slope of the path at the specified length.- Parameters:
index
- The segment numberproportion
- The proportion along the given segment- Returns:
- the angle in radians, in the range [-
Math.PI
,Math.PI
].
-
angleAtLength
public float angleAtLength(float length)
Returns the slope of the path at the specified length.- Parameters:
length
- The length along the path- Returns:
- the angle in radians, in the range [-
Math.PI
,Math.PI
].
-
findUpperIndex
public int findUpperIndex(float length)
Returns the index of the path segment that bounds the specified length along the path.- Parameters:
length
- The length along the path- Returns:
- The path segment index, or -1 if there is not such segment
-
-