return new PathIterator() { int current = 0;  public int getWindingRule() { return rule; }  public boolean isDone() { return current >= index; }  public void next() { current++; }  public int currentSegment(float[] coords) { if (current >= index) return SEG_CLOSE; int result = types[current >> 1]; int i = 0; if (result == 3) { coords[i++] = points[current++]; coords[i++] = points[current++]; } if (result == 2) { coords[i++] = points[current++]; coords[i++] = points[current++]; } if (result < 2) { coords[i++] = points[current++]; coords[i++] = points[current++]; if (at != null) at.transform(coords, 0, coords, 0, result == 0 ? 1 : result); } return result; }  public int currentSegment(double[] coords) { if (current >= index) return SEG_CLOSE; int result = types[current >> 1]; int i = 0; if (result == 3) { coords[i++] = points[current++]; coords[i++] = points[current++]; } if (result == 2) { coords[i++] = points[current++]; coords[i++] = points[current++]; } if (result < 2) { coords[i++] = points[current++]; coords[i++] = points[current++]; if (at != null) at.transform(coords, 0, coords, 0, result == 0 ? 1 : result); } return result; } };
return new GeneralPathIterator(this, at);
  public PathIterator getPathIterator(final AffineTransform at)  {    return new PathIterator()    {      int current = 0;      public int getWindingRule()      {        return rule;      }      public boolean isDone()      {        return current >= index;      }      public void next()      {        current++;      }      public int currentSegment(float[] coords)      {        if (current >= index)          return SEG_CLOSE;        int result = types[current >> 1];        int i = 0;        if (result == 3)          {            coords[i++] = points[current++];            coords[i++] = points[current++];          }        if (result == 2)          {            coords[i++] = points[current++];            coords[i++] = points[current++];          }        if (result < 2)          {            coords[i++] = points[current++];            coords[i++] = points[current++];            if (at != null)              at.transform(coords, 0, coords, 0, result == 0 ? 1 : result);          }        return result;      }      public int currentSegment(double[] coords)      {        if (current >= index)          return SEG_CLOSE;        int result = types[current >> 1];        int i = 0;        if (result == 3)          {            coords[i++] = points[current++];            coords[i++] = points[current++];          }        if (result == 2)          {            coords[i++] = points[current++];            coords[i++] = points[current++];          }        if (result < 2)          {            coords[i++] = points[current++];            coords[i++] = points[current++];            if (at != null)              at.transform(coords, 0, coords, 0, result == 0 ? 1 : result);          }        return result;      }    };  }