Class ShapeMultiPath

java.lang.Object
com.graphbuilder.curve.MultiPath
com.graphbuilder.curve.ShapeMultiPath
All Implemented Interfaces:
Shape

public class ShapeMultiPath extends MultiPath implements Shape
The ShapeMultiPath is-a MultiPath and implements the java.awt.Shape interface. Here is an example of how to use a ShapeMultiPath:
ControlPath cp = new ControlPath();
cp.addPoint(...); // add points
Curve c = new BezierCurve(cp, new GroupIterator("0:n-1"));

ShapeMultiPath smp = new ShapeMultiPath();
c.appendTo(smp);

Graphics2D g = ...;
g.draw(smp);

  • Constructor Details

    • ShapeMultiPath

      public ShapeMultiPath()
      Constructs a new ShapeMultiPath with a dimension of 2.
    • ShapeMultiPath

      public ShapeMultiPath(int dimension)
      Constructs a new ShapeMultiPath with the specified dimension requirement.
      Throws:
      IllegalArgumentException - If the specified dimension is less than 2.
  • Method Details

    • setBasisVectors

      public void setBasisVectors(int[] b)
      The basis vectors specify which index corresponds to the x-axis and which index corresponds to the y-axis. The value of the x-axis is at index location 0 and the value of the y-axis is at index location 1.
      Throws:
      IllegalArgumentException - If the axis values are less than 0 or greater than or equal to the dimension.
      See Also:
    • getBasisVectors

      public int[] getBasisVectors()
      Returns a new integer array with the basis vectors. The default basis vectors are {0, 1}.
      See Also:
    • getDistSq

      public double getDistSq(double x, double y)
      Returns the minimum distance^2 from the specified point to the line segments of this multi-path.
    • getWindingRule

      public int getWindingRule()
      Returns the value of the winding rule. The default value is PathIterator.WIND_EVEN_ODD.
      See Also:
    • setWindingRule

      public void setWindingRule(int rule)
      Sets the winding rule. The winding rule can either by PathIterator.WIND_EVEN_ODD or PathIterator.WIND_NON_ZERO, otherwise an IllegalArgumentException is thrown.
    • getPathIterator

      public PathIterator getPathIterator(AffineTransform at)
      Returns a new PathIterator object.
      Specified by:
      getPathIterator in interface Shape
    • getPathIterator

      public PathIterator getPathIterator(AffineTransform at, double flatness)
      Returns a new PathIterator object. The flatness parameter is ignored since a multi-path, by definition, is already flat.
      Specified by:
      getPathIterator in interface Shape
    • getBounds

      public Rectangle getBounds()
      See the getBounds2D() method.
      Specified by:
      getBounds in interface Shape
      See Also:
    • getBounds2D

      public Rectangle2D getBounds2D()
      Computes the bounding box of the points. When computing the bounding box, a point is considered if it is of type LINE_TO or it is of type MOVE_TO and the next point is of type LINE_TO. A value of null is returned if there is not enough data to define a bounding box.
      Specified by:
      getBounds2D in interface Shape
    • contains

      public boolean contains(double x, double y)
      Returns true if the point is contained inside the shape. Otherwise false is returned.
      Specified by:
      contains in interface Shape
    • contains

      public boolean contains(Point2D p)
      See the contains(x, y) method.
      Specified by:
      contains in interface Shape
      See Also:
    • contains

      public boolean contains(double x1, double y1, double w, double h)
      Returns true only if the shape contains all points of the rectangle. First, if any of the four corners is not contained in the shape then false is returned. Now we know that all four corners are inside the shape. Next, we check to see if any line segment of this shape intersects any of the 4 line segments formed by the rectangle. If there is an intersection, then false is returned. Otherwise true is returned.
      Specified by:
      contains in interface Shape
    • contains

      public boolean contains(Rectangle2D r)
      See the contains(x, y, w, h) method.
      Specified by:
      contains in interface Shape
      See Also:
    • intersects

      public boolean intersects(double x1, double y1, double w, double h)
      This method returns true if any line segment in this multi-path intersects any of the 4 line segments formed by the rectangle or any corner of the rectangle is inside the shape or any point of the shape is inside the rectangle. Otherwise false is returned.
      Specified by:
      intersects in interface Shape
    • intersects

      public boolean intersects(Rectangle2D r)
      See the intersects(x, y, w, h) method.
      Specified by:
      intersects in interface Shape
      See Also: