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: }