public PathIterator getPathIterator(AffineTransform at) { final GeneralPath path = new GeneralPath(GeneralPath.WIND_NON_ZERO, 32); final float x = (float)getX(); final float y = (float)getY(); final float w = (float)getWidth(); final float h = (float)getHeight(); final float hw = w / 2; final float hh = h / 2;  final float cv = 0.5522848f; path.moveTo(x+hw, y);  path.curveTo(x+hw+hw*cv, y, x+w, y+hh-hh*cv, x+w, y+hh);  path.curveTo(x+w, y+hh+hh*cv, x+hw+hw*cv, y+h, x+hw, y+h);  path.curveTo(x+hh-hh*cv, y+h, x, y+hh+hh*cv, x, y+hh);  path.curveTo(x, y+hh-hh*cv, x+hh-hh*cv, y, x+hw, y); return path.getPathIterator(at);
public PathIterator getPathIterator(AffineTransform at) {  return new Arc2D.ArcIterator(this, at);
	public PathIterator getPathIterator(AffineTransform at) {		final GeneralPath path = new GeneralPath(GeneralPath.WIND_NON_ZERO, 32);		final float x = (float)getX();		final float y = (float)getY();		final float w = (float)getWidth();		final float h = (float)getHeight();		final float hw = w / 2;		final float hh = h / 2;		/*		final double angle = Math.PI / 4.0;		final double a = 1.0 - Math.cos(angle);		final double b = Math.tan(angle);		final double c = Math.sqrt(1.0 + b * b) - 1 + a;		final float cv = (float)(4.0 / 3.0 * a * b / c);		*/		final float cv = 0.5522848f;		path.moveTo(x+hw, y);		// Top right		path.curveTo(x+hw+hw*cv, y, x+w, y+hh-hh*cv, x+w, y+hh);		// Bottom right		path.curveTo(x+w, y+hh+hh*cv, x+hw+hw*cv, y+h, x+hw, y+h);		// Bottom left		path.curveTo(x+hh-hh*cv, y+h, x, y+hh+hh*cv, x, y+hh);		// Top left		path.curveTo(x, y+hh-hh*cv, x+hh-hh*cv, y, x+hw, y);		return path.getPathIterator(at);	}