/**
   * Constructor
   *
   * @param points an array of points
   */
  public GPointsArray(GPointsArray points) {
    this.points = new ArrayList<GPoint>(points.getNPoints());

    for (int i = 0; i < points.getNPoints(); i++) {
      this.points.add(new GPoint(points.get(i)));
    }
  }
  /**
   * Sets all the points in the array
   *
   * @param pts the new points. The number of points could differ from the original.
   */
  public void set(GPointsArray pts) {
    if (pts.getNPoints() == points.size()) {
      for (int i = 0; i < points.size(); i++) {
        points.get(i).set(pts.get(i));
      }
    } else if (pts.getNPoints() > points.size()) {
      for (int i = 0; i < points.size(); i++) {
        points.get(i).set(pts.get(i));
      }

      for (int i = points.size(); i < pts.getNPoints(); i++) {
        points.add(new GPoint(pts.get(i)));
      }
    } else {
      for (int i = 0; i < pts.getNPoints(); i++) {
        points.get(i).set(pts.get(i));
      }

      points.subList(pts.getNPoints(), points.size()).clear();
    }
  }
 /**
  * Adds a new set of points to the array
  *
  * @param pts the new set of points
  */
 public void add(GPointsArray pts) {
   for (int i = 0; i < pts.getNPoints(); i++) {
     points.add(new GPoint(pts.get(i)));
   }
 }