Class 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.

    Version:
    $Id: PathLength.java 1802297 2017-07-18 13:58:12Z ssteiner $
    • 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
      A PathIterator that returns only the next path segment from another PathIterator.
    • 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 in segments 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 specified Shape.
    • 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.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 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 in segments 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.
    • Constructor Detail

      • PathLength

        public PathLength​(java.awt.Shape path)
        Creates a new PathLength object for the specified Shape.
        Parameters:
        path - The Path (or Shape) to use.
    • 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 number
        proportion - 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