01: import java.awt.*;
02: import java.awt.geom.*;
03: 
04: /**
05:    A scene shape that is composed of multiple geometric shapes.
06: */
07: public abstract class CompoundShape extends SelectableShape
08: {
09:    public CompoundShape()
10:    {
11:       path = new GeneralPath();
12:    }
13: 
14:    protected void add(Shape s)
15:    {
16:       path.append(s, false);
17:    }
18: 
19:    public boolean contains(Point2D aPoint)
20:    {
21:       return path.contains(aPoint);
22:    }
23: 
24:    public void translate(double dx, double dy)
25:    {
26:       AffineTransform t 
27:          = AffineTransform.getTranslateInstance(dx, dy);
28:       path.transform(t);
29:    }
30: 
31:    public void draw(Graphics2D g2)
32:    {
33:       g2.draw(path);
34:    }
35:    
36:    private GeneralPath path;
37: }