## Construir Formas Complejas desde Geométricos Primitivos

Construir un área geométrica (CAG) es el proceso de crear una nueva forma geométrica realizando operaciones con las ya existentes. En el API Java 2D un tipo especial de Shape llamado Area soporta operaciones booleanas. Podemos construir un Area desde cualquier Shape .

Areas soporta la siguientes operaciones booleanas:

| Unión |  | Subtracción
| Intersección |  | Or-Exclusivo (XOR)

### Ejemplo: Areas

> En este ejemplo, los objetos Area construyen una forma de pera partiendo de varias elipses.

> Esta es una imagen del GUI del applet. Para ajecutar el appler, pulsa sobre ella. El applet aparecerá en una nueva ventana del navegador.

> Pear.java contiene el código completo de este applet.

> Las hojas son creadas realizando una interesección entre dos círulos solapados.

>     leaf = new Ellipse2D.Double();
>     ...
>     leaf1 = new Area(leaf);
>     leaf2 = new Area(leaf);
>     ...
>     leaf.setFrame(ew-16, eh-29, 15.0, 15.0);
>     leaf1 = new Area(leaf);
>     leaf.setFrame(ew-14, eh-47, 30.0, 30.0);
>     leaf2 = new Area(leaf);
>     leaf1.intersect(leaf2);
>     g2.fill(leaf1);
>     ...
>     leaf.setFrame(ew+1, eh-29, 15.0, 15.0);
>     leaf1 = new Area(leaf);
>     leaf2.intersect(leaf1);
>     g2.fill(leaf2);

Los círculos solapados también se usan para cosntruir el rabo mediante una operación de subtracción.

    stem = new Ellipse2D.Double();
    ...
    stem.setFrame(ew, eh-42, 40.0, 40.0);
    st1 = new Area(stem);
    stem.setFrame(ew+3, eh-47, 50.0, 50.0);
    st2 = new Area(stem);
    st1.subtract(st2);
    g2.fill(st1);

El cuerpo de la pera está construido mediante una operación unión de un círculo y un óvalo.

    circle = new Ellipse2D.Double();
    oval = new Ellipse2D.Double();
    circ = new Area(circle);
    ov = new Area(oval);
    ...
    circle.setFrame(ew-25, eh, 50.0, 50.0);
    oval.setFrame(ew-19, eh-20, 40.0, 70.0);
    circ = new Area(circle);
    ov = new Area(oval);
    circ.add(ov);
    g2.fill(circ);

Ozito