Class RMPath

  • All Implemented Interfaces:
    Archivable, java.awt.Shape, java.lang.Cloneable

    public class RMPath
    extends java.lang.Object
    implements java.awt.Shape, java.lang.Cloneable, Archivable
    RMPath - A graphics path (moveTo, lineTo, etc.). It provides the following functionality: - Allows for easy initialization with the path constructions methods (moveToPoint:, lineToPoint:, etc.). - Provides simple methods for path operations (stroke, fill, clip, etc.). Iterate over path like this:
    
     RMPoint points[] = new RMPoint[3];
     for(int i=0, iMax=path.getElementCount(); i<iMax; i++) { int element = path.getElement(i, points);
       switch(element) {
         case RMPath.MOVE_TO:
         case RMPath.LINE_TO:
         case RMPath.QUAD_TO:
         case RMPath.CURVE_TO:
         case RMPath.CLOSE:
       }
     }
     
    • Constructor Summary

      Constructors 
      Constructor Description
      RMPath()
      Creates an empty path.
      RMPath​(java.awt.Shape aShape)
      Creates a path for the given shape.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addSegment​(RMLine aSegment)
      Adds the list of segments to the path, starting with a moveto.
      void addSegments​(java.util.List<? extends RMLine> theSegments)
      Adds the list of segments to the path, starting with a moveto.
      double arcLength()
      Returns the total arc length of path segments.
      RMPath clone()
      Standard clone implementation.
      void closePath()
      Adds a Close element to the given path.
      boolean contains​(double x, double y)
      Returns whether the given xy coordinate is inside the path.
      boolean contains​(double x, double y, double w, double h)
      Returns whether the interior of the shape entirely contains the specified rectangular area.
      boolean contains​(java.awt.geom.Point2D aPoint)
      Returns whether the given point is inside the path.
      boolean contains​(java.awt.geom.Rectangle2D aRect)
      Returns whether the interior of the shape entirely contains the specified rectangular area.
      RMPath createTransformedPath​(java.awt.geom.AffineTransform aTransform)
      Returns a transformed version of this path.
      void curveTo​(double cp1x, double cp1y, double cp2x, double cp2y, double px, double py)
      Adds a CurveTo element to the path for the given point and control points.
      void curveTo​(RMPoint cp1, RMPoint cp2, RMPoint p)
      Adds a CurveTo element to the path for the given point and control points.
      boolean equals​(java.lang.Object anObj)
      Standard equals implementation.
      java.lang.Object fromXML​(RXArchiver anArchiver, RXElement anElement)
      XML unarchival.
      java.awt.Rectangle getBounds()
      Returns the bounds for the path as an integer rect.
      RMRect getBounds2D()
      Returns the bounds for the path.
      RMRect getControlPointBounds()
      Returns the rectangle that encloses all the control points.
      byte getElement​(int anIndex)
      Returns the element type at the given index.
      byte getElement​(int anIndex, RMPoint[] points)
      Returns the element type at the given index and its associated points (returned in the given point array).
      int getElementCount()
      Returns the number of elements in this path.
      int getElementIndexForPointIndex​(int index)
      Returns the element index for the given point index.
      byte getElementLast()
      Returns the last element.
      int getElementPointIndex​(int anIndex)
      Returns the point index for a given element.
      double getHeight()
      Returns the height of the path.
      RMHitInfo getHitInfo​(RMBezier aBezier, boolean findFirstHit)
      Returns the hit info for the given bezier curve against this path.
      RMHitInfo getHitInfo​(RMLine aLine, boolean findFirstHit)
      Returns the hit info for the given line against this path.
      RMPath getPathInRect​(java.awt.geom.Rectangle2D aRect)
      Returns a copy of the path scaled to exactly fit in the given rect.
      java.awt.geom.PathIterator getPathIterator​(java.awt.geom.AffineTransform aTransform)
      Returns a path iterator for this path and the given transform.
      java.awt.geom.PathIterator getPathIterator​(java.awt.geom.AffineTransform aTransform, double flatness)
      Returns a path iterator for this path and the given transform and flatness.
      RMPoint getPoint​(int anIndex)
      Returns the point at the given index.
      int getPointCount()
      Returns the number of points in the path.
      RMPoint getPointLast()
      Returns the last point in the path.
      RMPath getReversedPath()
      Returns a new path with the same points as this path, but in reverse order.
      java.util.List<? extends RMLine> getSegments()
      Converts a path into a list of RMLine/RMQuadratic/RMBezier.
      java.util.List<java.util.List<? extends RMLine>> getSubpathsSegments()
      Converts a path into a list subpath lists of RMLine/RMQuadratic/RMBezier.
      double getWidth()
      Returns the width of the path.
      byte getWindingRule()
      Returns the winding rule which describes how inner path perimeters are filled and clipped.
      double getX()
      Returns the X of the path.
      double getY()
      Returns the Y of the path.
      int handleAtPointForBounds​(RMPoint aPoint, RMRect aRect, int selectedPoint, RMSize handleSize)
      Returns the handle index for a given point against this path scaled to the given rect.
      boolean hitHandle​(RMPoint aPoint, int ptIndex, RMSize handleSize)
      Hit test the point (in path coords) against a given path point.
      boolean intersects​(double x, double y, double w, double h)
      Returns whether the interior of the path intersects the interior of a specified rectangular area.
      boolean intersects​(double x, double y, double w, double h, float lineWidth)
      Returns whether path drawn with given linewidth is hit by given rect.
      boolean intersects​(RMPoint aPoint, float lineWidth)
      Returns whether path is hit by point for a path linewidth.
      boolean intersects​(RMLine aLine)
      Returns whether path is hit by a line.
      boolean intersects​(RMPath aPath, float lineWidth)
      Returns whether path drawn with given linewidth is hit by given path.
      boolean intersects​(java.awt.geom.Rectangle2D aRect)
      Returns whether the interior of the path intersects the interior of a specified Rectangle2D.
      boolean isClosed()
      Returns whether path has any open subpaths.
      void lineTo​(double px, double py)
      Adds a LineTo element to the path for the given point.
      void lineTo​(RMPoint p)
      Adds a LineTo element to the path for the given point.
      void moveTo​(double px, double py)
      Adds a MoveTo element to the path for the given point.
      void moveTo​(RMPoint p)
      Adds a MoveTo element to the path for the given point.
      int pointCountForElementType​(int element)
      Returns the total number of points associated with a given type of path element.
      RMPoint pointInPathCoordsFromPoint​(RMPoint aPoint, RMRect aRect)
      Returns the given point converted to path coords for given path bounds.
      boolean pointOnPath​(int pointIndex)
      Returns true of the point at pointIndex is on the path, and false if it is on the convex hull.
      void quadTo​(double cpx, double cpy, double px, double py)
      Adds a QuadTo element to the path for the given point and control point.
      void quadTo​(RMPoint cp, RMPoint p)
      Adds a QuadTo element to the path for the given point and control point.
      void relativeCurveTo​(RMPoint cp1, RMPoint cp2, RMPoint aPoint)
      Adds a CurveTo element to the path for the given point offset from the path's current point.
      void relativeLineTo​(RMPoint aPoint)
      Adds a LineTo element to the path for the given point offset from the path's current point.
      void relativeMoveTo​(RMPoint aPoint)
      Adds a MoveTo element to the path for the given point offset from the path's current point.
      void removeElement​(int elementIndex)
      Removes an element, reconnecting the elements on either side of the deleted element.
      void removeLastElement()
      Removes the last element from the path.
      void reset()
      Resets the current path with no elements or points.
      void setBounds​(RMRect bounds)
      Sets the bounds that the path is relative to.
      void setPoint​(int index, RMPoint point)
      Sets the path point at the given index to the given point.
      void setPointStructured​(int index, RMPoint point)
      Resets the point at the given index to the given point, while preserving something.
      void setWindingRule​(byte windingRule)
      Sets the winding rule which describes how inner path perimeters are filled and clipped.
      RXElement toXML​(RXArchiver anArchiver)
      XML archival.
      void transformBy​(RMTransform aTransform)
      Transforms the points in the path by the given transform.
      • Methods inherited from class java.lang.Object

        finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • RMPath

        public RMPath()
        Creates an empty path.
      • RMPath

        public RMPath​(java.awt.Shape aShape)
        Creates a path for the given shape.
    • Method Detail

      • moveTo

        public void moveTo​(RMPoint p)
        Adds a MoveTo element to the path for the given point.
      • moveTo

        public void moveTo​(double px,
                           double py)
        Adds a MoveTo element to the path for the given point.
      • lineTo

        public void lineTo​(RMPoint p)
        Adds a LineTo element to the path for the given point.
      • lineTo

        public void lineTo​(double px,
                           double py)
        Adds a LineTo element to the path for the given point.
      • quadTo

        public void quadTo​(RMPoint cp,
                           RMPoint p)
        Adds a QuadTo element to the path for the given point and control point.
      • quadTo

        public void quadTo​(double cpx,
                           double cpy,
                           double px,
                           double py)
        Adds a QuadTo element to the path for the given point and control point.
      • curveTo

        public void curveTo​(RMPoint cp1,
                            RMPoint cp2,
                            RMPoint p)
        Adds a CurveTo element to the path for the given point and control points.
      • curveTo

        public void curveTo​(double cp1x,
                            double cp1y,
                            double cp2x,
                            double cp2y,
                            double px,
                            double py)
        Adds a CurveTo element to the path for the given point and control points.
      • closePath

        public void closePath()
        Adds a Close element to the given path.
      • reset

        public void reset()
        Resets the current path with no elements or points.
      • relativeMoveTo

        public void relativeMoveTo​(RMPoint aPoint)
        Adds a MoveTo element to the path for the given point offset from the path's current point.
      • relativeLineTo

        public void relativeLineTo​(RMPoint aPoint)
        Adds a LineTo element to the path for the given point offset from the path's current point.
      • relativeCurveTo

        public void relativeCurveTo​(RMPoint cp1,
                                    RMPoint cp2,
                                    RMPoint aPoint)
        Adds a CurveTo element to the path for the given point offset from the path's current point.
      • getWindingRule

        public byte getWindingRule()
        Returns the winding rule which describes how inner path perimeters are filled and clipped.
      • setWindingRule

        public void setWindingRule​(byte windingRule)
        Sets the winding rule which describes how inner path perimeters are filled and clipped.
      • getX

        public double getX()
        Returns the X of the path.
      • getY

        public double getY()
        Returns the Y of the path.
      • getWidth

        public double getWidth()
        Returns the width of the path.
      • getHeight

        public double getHeight()
        Returns the height of the path.
      • getBounds

        public java.awt.Rectangle getBounds()
        Returns the bounds for the path as an integer rect.
        Specified by:
        getBounds in interface java.awt.Shape
      • getBounds2D

        public RMRect getBounds2D()
        Returns the bounds for the path.
        Specified by:
        getBounds2D in interface java.awt.Shape
      • setBounds

        public void setBounds​(RMRect bounds)
        Sets the bounds that the path is relative to.
      • getControlPointBounds

        public RMRect getControlPointBounds()
        Returns the rectangle that encloses all the control points.
      • getElementCount

        public int getElementCount()
        Returns the number of elements in this path.
      • getElement

        public byte getElement​(int anIndex)
        Returns the element type at the given index.
      • getElement

        public byte getElement​(int anIndex,
                               RMPoint[] points)
        Returns the element type at the given index and its associated points (returned in the given point array).
      • getElementLast

        public byte getElementLast()
        Returns the last element.
      • getPointCount

        public int getPointCount()
        Returns the number of points in the path.
      • getPoint

        public RMPoint getPoint​(int anIndex)
        Returns the point at the given index.
      • getPointLast

        public RMPoint getPointLast()
        Returns the last point in the path.
      • getElementPointIndex

        public int getElementPointIndex​(int anIndex)
        Returns the point index for a given element.
      • getElementIndexForPointIndex

        public int getElementIndexForPointIndex​(int index)
        Returns the element index for the given point index.
      • pointCountForElementType

        public int pointCountForElementType​(int element)
        Returns the total number of points associated with a given type of path element.
      • pointOnPath

        public boolean pointOnPath​(int pointIndex)
        Returns true of the point at pointIndex is on the path, and false if it is on the convex hull.
      • isClosed

        public boolean isClosed()
        Returns whether path has any open subpaths.
      • getPathInRect

        public RMPath getPathInRect​(java.awt.geom.Rectangle2D aRect)
        Returns a copy of the path scaled to exactly fit in the given rect.
      • contains

        public boolean contains​(java.awt.geom.Point2D aPoint)
        Returns whether the given point is inside the path.
        Specified by:
        contains in interface java.awt.Shape
      • contains

        public boolean contains​(double x,
                                double y)
        Returns whether the given xy coordinate is inside the path.
        Specified by:
        contains in interface java.awt.Shape
      • contains

        public boolean contains​(java.awt.geom.Rectangle2D aRect)
        Returns whether the interior of the shape entirely contains the specified rectangular area.
        Specified by:
        contains in interface java.awt.Shape
      • contains

        public boolean contains​(double x,
                                double y,
                                double w,
                                double h)
        Returns whether the interior of the shape entirely contains the specified rectangular area.
        Specified by:
        contains in interface java.awt.Shape
      • intersects

        public boolean intersects​(java.awt.geom.Rectangle2D aRect)
        Returns whether the interior of the path intersects the interior of a specified Rectangle2D.
        Specified by:
        intersects in interface java.awt.Shape
      • intersects

        public boolean intersects​(double x,
                                  double y,
                                  double w,
                                  double h)
        Returns whether the interior of the path intersects the interior of a specified rectangular area.
        Specified by:
        intersects in interface java.awt.Shape
      • intersects

        public boolean intersects​(RMPoint aPoint,
                                  float lineWidth)
        Returns whether path is hit by point for a path linewidth.
      • intersects

        public boolean intersects​(RMLine aLine)
        Returns whether path is hit by a line.
      • intersects

        public boolean intersects​(double x,
                                  double y,
                                  double w,
                                  double h,
                                  float lineWidth)
        Returns whether path drawn with given linewidth is hit by given rect.
      • intersects

        public boolean intersects​(RMPath aPath,
                                  float lineWidth)
        Returns whether path drawn with given linewidth is hit by given path.
      • getHitInfo

        public RMHitInfo getHitInfo​(RMLine aLine,
                                    boolean findFirstHit)
        Returns the hit info for the given line against this path.
      • getSegments

        public java.util.List<? extends RMLine> getSegments()
        Converts a path into a list of RMLine/RMQuadratic/RMBezier.
      • getSubpathsSegments

        public java.util.List<java.util.List<? extends RMLine>> getSubpathsSegments()
        Converts a path into a list subpath lists of RMLine/RMQuadratic/RMBezier.
      • addSegments

        public void addSegments​(java.util.List<? extends RMLine> theSegments)
        Adds the list of segments to the path, starting with a moveto.
      • addSegment

        public void addSegment​(RMLine aSegment)
        Adds the list of segments to the path, starting with a moveto.
      • arcLength

        public double arcLength()
        Returns the total arc length of path segments.
      • getHitInfo

        public RMHitInfo getHitInfo​(RMBezier aBezier,
                                    boolean findFirstHit)
        Returns the hit info for the given bezier curve against this path.
      • handleAtPointForBounds

        public int handleAtPointForBounds​(RMPoint aPoint,
                                          RMRect aRect,
                                          int selectedPoint,
                                          RMSize handleSize)
        Returns the handle index for a given point against this path scaled to the given rect. Only returns points that are on the path, except for the control points of selectedPoint (if not -1)
      • hitHandle

        public boolean hitHandle​(RMPoint aPoint,
                                 int ptIndex,
                                 RMSize handleSize)
        Hit test the point (in path coords) against a given path point.
      • pointInPathCoordsFromPoint

        public RMPoint pointInPathCoordsFromPoint​(RMPoint aPoint,
                                                  RMRect aRect)
        Returns the given point converted to path coords for given path bounds.
      • removeLastElement

        public void removeLastElement()
        Removes the last element from the path.
      • removeElement

        public void removeElement​(int elementIndex)
        Removes an element, reconnecting the elements on either side of the deleted element.
      • setPoint

        public void setPoint​(int index,
                             RMPoint point)
        Sets the path point at the given index to the given point.
      • setPointStructured

        public void setPointStructured​(int index,
                                       RMPoint point)
        Resets the point at the given index to the given point, while preserving something.
      • getPathIterator

        public java.awt.geom.PathIterator getPathIterator​(java.awt.geom.AffineTransform aTransform)
        Returns a path iterator for this path and the given transform.
        Specified by:
        getPathIterator in interface java.awt.Shape
      • getPathIterator

        public java.awt.geom.PathIterator getPathIterator​(java.awt.geom.AffineTransform aTransform,
                                                          double flatness)
        Returns a path iterator for this path and the given transform and flatness.
        Specified by:
        getPathIterator in interface java.awt.Shape
      • transformBy

        public void transformBy​(RMTransform aTransform)
        Transforms the points in the path by the given transform.
      • createTransformedPath

        public RMPath createTransformedPath​(java.awt.geom.AffineTransform aTransform)
        Returns a transformed version of this path.
      • getReversedPath

        public RMPath getReversedPath()
        Returns a new path with the same points as this path, but in reverse order.
      • equals

        public boolean equals​(java.lang.Object anObj)
        Standard equals implementation.
        Overrides:
        equals in class java.lang.Object
      • clone

        public RMPath clone()
        Standard clone implementation.
        Overrides:
        clone in class java.lang.Object