public Area(Shape s)
public Area()
  public Area(Shape s)  {    this();    Vector p = makeSegment(s);    // empty path    if (p == null)      return;    // delete empty paths    for (int i = 0; i < p.size(); i++)      if (((Segment) p.elementAt(i)).getSignedArea() == 0.0)	p.remove(i--);    /*     * Resolve self intersecting paths into non-intersecting     * solids and holes.     * Algorithm is as follows:     * 1: Create nodes at all self intersections     * 2: Put all segments into a list     * 3: Grab a segment, follow it, change direction at each node,     *    removing segments from the list in the process     * 4: Repeat (3) until no segments remain in the list     * 5: Remove redundant paths and sort into solids and holes     */    Vector paths = new Vector();    Segment v;    for (int i = 0; i < p.size(); i++)      {	Segment path = (Segment) p.elementAt(i);	createNodesSelf(path);      }    if (p.size() > 1)      {	for (int i = 0; i < p.size() - 1; i++)	  for (int j = i + 1; j < p.size(); j++)	    {	      Segment path1 = (Segment) p.elementAt(i);	      Segment path2 = (Segment) p.elementAt(j);	      createNodes(path1, path2);	    }      }    // we have intersecting points.    Vector segments = new Vector();    for (int i = 0; i < p.size(); i++)      {	Segment path = v = (Segment) p.elementAt(i);	do	  {	    segments.add(v);	    v = v.next;	  }	while (v != path);      }    paths = weilerAtherton(segments);    deleteRedundantPaths(paths);  }