1 import java.awt.*;
2 import java.awt.geom.*;
3
4 /**
5
6 */
7 public class CircleNode implements Node
8 {
9 /**
10
11 @param aColor
12 */
13 public CircleNode(Color aColor)
14 {
15 size = DEFAULT_SIZE;
16 x = 0;
17 y = 0;
18 color = aColor;
19 }
20
21 public Object clone()
22 {
23 try
24 {
25 return super.clone();
26 }
27 catch (CloneNotSupportedException exception)
28 {
29 return null;
30 }
31 }
32
33 public void draw(Graphics2D g2)
34 {
35 Ellipse2D circle = new Ellipse2D.Double(
36 x, y, size, size);
37 Color oldColor = g2.getColor();
38 g2.setColor(color);
39 g2.fill(circle);
40 g2.setColor(oldColor);
41 g2.draw(circle);
42 }
43
44 public void translate(double dx, double dy)
45 {
46 x += dx;
47 y += dy;
48 }
49
50 public boolean contains(Point2D p)
51 {
52 Ellipse2D circle = new Ellipse2D.Double(
53 x, y, size, size);
54 return circle.contains(p);
55 }
56
57 public Rectangle2D getBounds()
58 {
59 return new Rectangle2D.Double(
60 x, y, size, size);
61 }
62
63 public Point2D getConnectionPoint(Point2D other)
64 {
65 double centerX = x + size / 2;
66 double centerY = y + size / 2;
67 double dx = other.getX() - centerX;
68 double dy = other.getY() - centerY;
69 double distance = Math.sqrt(dx * dx + dy * dy);
70 if (distance == 0) return other;
71 else return new Point2D.Double(
72 centerX + dx * (size / 2) / distance,
73 centerY + dy * (size / 2) / distance);
74 }
75
76 private double x;
77 private double y;
78 private double size;
79 private Color color;
80 private static final int DEFAULT_SIZE = 20;
81 }