01: import java.awt.*;
02: import java.awt.geom.*;
03:
04: /**
05: A class that assumes that an edge can yield its shape
06: as a general path, and then takes advantage of the fact
07: that containment testing can be done by fattening the
08: general path.
09: */
10: abstract class GeneralPathEdge extends AbstractEdge
11: {
12: /**
13: Returns the path that should be stroked to
14: draw this edge. The path does not include
15: arrow tips or labels.
16: @return a path along the edge
17: */
18: public abstract GeneralPath getPath();
19:
20: public boolean contains(Point2D aPoint)
21: {
22: final double MAX_DIST = 3;
23:
24: // the end points may contain small nodes, so don't
25: // match them
26: Line2D conn = getConnectionPoints();
27: if (aPoint.distance(conn.getP1()) <= MAX_DIST
28: || aPoint.distance(conn.getP2()) <= MAX_DIST)
29: return false;
30:
31: GeneralPath p = getPath();
32: BasicStroke fatStroke = new BasicStroke(
33: (float)(2 * MAX_DIST));
34: Shape fatPath = fatStroke.createStrokedShape(p);
35: return fatPath.contains(aPoint);
36: }
37: }