com.graphbuilder.curve
Class ShapeMultiPath

java.lang.Object
  extended bycom.graphbuilder.curve.MultiPath
      extended bycom.graphbuilder.curve.ShapeMultiPath
All Implemented Interfaces:
java.awt.Shape

public class ShapeMultiPath
extends MultiPath
implements java.awt.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);


Field Summary
 
Fields inherited from class com.graphbuilder.curve.MultiPath
LINE_TO, MOVE_TO
 
Constructor Summary
ShapeMultiPath()
          Constructs a new ShapeMultiPath with a dimension of 2.
ShapeMultiPath(int dimension)
          Constructs a new ShapeMultiPath with the specified dimension requirement.
 
Method Summary
 boolean contains(double x, double y)
          Returns true if the point is contained inside the shape.
 boolean contains(double x1, double y1, double w, double h)
          Returns true only if the shape contains all points of the rectangle.
 boolean contains(java.awt.geom.Point2D p)
          See the contains(x, y) method.
 boolean contains(java.awt.geom.Rectangle2D r)
          See the contains(x, y, w, h) method.
 int[] getBasisVectors()
          Returns a new integer array with the basis vectors.
 java.awt.Rectangle getBounds()
          See the getBounds2D() method.
 java.awt.geom.Rectangle2D getBounds2D()
          Computes the bounding box of the points.
 double getDistSq(double x, double y)
          Returns the minimum distance^2 from the specified point to the line segments of this multi-path.
 java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform at)
          Returns a new PathIterator object.
 java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform at, double flatness)
          Returns a new PathIterator object.
 int getWindingRule()
          Returns the value of the winding rule.
 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.
 boolean intersects(java.awt.geom.Rectangle2D r)
          See the intersects(x, y, w, h) method.
 void setBasisVectors(int[] b)
          The basis vectors specify which index corresponds to the x-axis and which index corresponds to the y-axis.
 void setWindingRule(int rule)
          Sets the winding rule.
 
Methods inherited from class com.graphbuilder.curve.MultiPath
ensureCapacity, get, getCapacity, getDimension, getDistSq, getFlatness, getNumPoints, getType, lineTo, moveTo, set, setFlatness, setNumPoints, setType, trimArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

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:
java.lang.IllegalArgumentException - If the specified dimension is less than 2.
Method Detail

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:
java.lang.IllegalArgumentException - If the axis values are less than 0 or greater than or equal to the dimension.
See Also:
getBasisVectors()

getBasisVectors

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

See Also:
setBasisVectors(int[])

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(int)

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 java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform at)
Returns a new PathIterator object.

Specified by:
getPathIterator in interface java.awt.Shape

getPathIterator

public java.awt.geom.PathIterator getPathIterator(java.awt.geom.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 java.awt.Shape

getBounds

public java.awt.Rectangle getBounds()
See the getBounds2D() method.

Specified by:
getBounds in interface java.awt.Shape
See Also:
getBounds2D()

getBounds2D

public java.awt.geom.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 java.awt.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 java.awt.Shape

contains

public boolean contains(java.awt.geom.Point2D p)
See the contains(x, y) method.

Specified by:
contains in interface java.awt.Shape
See Also:
contains(double,double)

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 java.awt.Shape

contains

public boolean contains(java.awt.geom.Rectangle2D r)
See the contains(x, y, w, h) method.

Specified by:
contains in interface java.awt.Shape
See Also:
contains(double,double,double,double)

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 java.awt.Shape

intersects

public boolean intersects(java.awt.geom.Rectangle2D r)
See the intersects(x, y, w, h) method.

Specified by:
intersects in interface java.awt.Shape
See Also:
intersects(double,double,double,double)