Class RMPath

java.lang.Object
com.inductiveautomation.rm.graphics.RMPath
All Implemented Interfaces:
Archivable, Shape, Cloneable

public class RMPath extends Object implements Shape, 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:
   }
 }
 
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final byte
     
    static final byte
     
    static final byte
     
    static final byte
     
    static final byte
     
    static final RMPath
     
    static final byte
     
    static final byte
     
  • Constructor Summary

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

    Modifier and Type
    Method
    Description
    void
    addSegment(RMLine aSegment)
    Adds the list of segments to the path, starting with a moveto.
    void
    addSegments(List<? extends RMLine> theSegments)
    Adds the list of segments to the path, starting with a moveto.
    double
    Returns the total arc length of path segments.
    Standard clone implementation.
    void
    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(Point2D aPoint)
    Returns whether the given point is inside the path.
    boolean
    Returns whether the interior of the shape entirely contains the specified rectangular area.
    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(Object anObj)
    Standard equals implementation.
    fromXML(RXArchiver anArchiver, RXElement anElement)
    XML unarchival.
    Returns the bounds for the path as an integer rect.
    Returns the bounds for the path.
    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
    Returns the number of elements in this path.
    int
    Returns the element index for the given point index.
    byte
    Returns the last element.
    int
    getElementPointIndex(int anIndex)
    Returns the point index for a given element.
    double
    Returns the height of the path.
    getHitInfo(RMBezier aBezier, boolean findFirstHit)
    Returns the hit info for the given bezier curve against this path.
    getHitInfo(RMLine aLine, boolean findFirstHit)
    Returns the hit info for the given line against this path.
    Returns a copy of the path scaled to exactly fit in the given rect.
    Returns a path iterator for this path and the given transform.
    getPathIterator(AffineTransform aTransform, double flatness)
    Returns a path iterator for this path and the given transform and flatness.
    getPoint(int anIndex)
    Returns the point at the given index.
    int
    Returns the number of points in the path.
    Returns the last point in the path.
    Returns a new path with the same points as this path, but in reverse order.
    List<? extends RMLine>
    Converts a path into a list of RMLine/RMQuadratic/RMBezier.
    List<List<? extends RMLine>>
    Converts a path into a list subpath lists of RMLine/RMQuadratic/RMBezier.
    double
    Returns the width of the path.
    byte
    Returns the winding rule which describes how inner path perimeters are filled and clipped.
    double
    Returns the X of the path.
    double
    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
    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
    Returns whether the interior of the path intersects the interior of a specified Rectangle2D.
    boolean
    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
    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
    Adds a MoveTo element to the path for the given point.
    int
    Returns the total number of points associated with a given type of path element.
    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
    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
    Adds a LineTo element to the path for the given point offset from the path's current point.
    void
    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
    Removes the last element from the path.
    void
    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.
    toXML(RXArchiver anArchiver)
    XML archival.
    void
    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
  • Field Details

  • Constructor Details

    • RMPath

      public RMPath()
      Creates an empty path.
    • RMPath

      public RMPath(Shape aShape)
      Creates a path for the given shape.
  • Method Details

    • 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 Rectangle getBounds()
      Returns the bounds for the path as an integer rect.
      Specified by:
      getBounds in interface Shape
    • getBounds2D

      public RMRect getBounds2D()
      Returns the bounds for the path.
      Specified by:
      getBounds2D in interface 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(Rectangle2D aRect)
      Returns a copy of the path scaled to exactly fit in the given rect.
    • contains

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

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

      public boolean contains(Rectangle2D aRect)
      Returns whether the interior of the shape entirely contains the specified rectangular area.
      Specified by:
      contains in interface 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 Shape
    • intersects

      public boolean intersects(Rectangle2D aRect)
      Returns whether the interior of the path intersects the interior of a specified Rectangle2D.
      Specified by:
      intersects in interface 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 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 List<? extends RMLine> getSegments()
      Converts a path into a list of RMLine/RMQuadratic/RMBezier.
    • getSubpathsSegments

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

      public void addSegments(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 PathIterator getPathIterator(AffineTransform aTransform)
      Returns a path iterator for this path and the given transform.
      Specified by:
      getPathIterator in interface Shape
    • getPathIterator

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

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

      public RMPath createTransformedPath(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(Object anObj)
      Standard equals implementation.
      Overrides:
      equals in class Object
    • clone

      public RMPath clone()
      Standard clone implementation.
      Overrides:
      clone in class Object
    • toXML

      public RXElement toXML(RXArchiver anArchiver)
      XML archival.
      Specified by:
      toXML in interface Archivable
    • fromXML

      public Object fromXML(RXArchiver anArchiver, RXElement anElement)
      XML unarchival.
      Specified by:
      fromXML in interface Archivable