public PathIterator getPathIterator(final AffineTransform at)
public PathIterator getPathIterator(AffineTransform 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;      }    };  }