I'm trying to rotate a shape around a point, but I'm having a problem. To give this some context - it's for a game. The transform is applied and the image is drawn, then green rectangle is drawn, then the transform is reset. When I try to use newTrans.createTransformedShape() to transform the red rectangle, I get the blue rectangle (which should actually overlap the green one).

Shouldn't applying a transform, drawing a shape and resetting the transform have the same effect as using createTransformedShape() with the original transform?

``````AffineTransform origTrans = g.getTransform(),
newTrans = (AffineTransform)origTrans.clone();
newTrans.rotate(rotationAngle, location.x+(image.getWidth()/2), location.y+(image.getHeight()/2));
g.setTransform(newTrans);

g.drawImage(image, (int)location.x, (int)location.y, null);
g.setColor(Color.green);
g.draw(new Rectangle2D.Double(location.x, location.y, image.getWidth(), image.getHeight()));
g.setTransform(origTrans);

Shape bounds = newTrans.createTransformedShape(new Rectangle2D.Double(location.x, location.y, image.getWidth(), image.getHeight()));
g.setColor(Color.blue);
g.draw(bounds);

g.setColor(Color.red);
g.draw(new Rectangle2D.Double(location.x, location.y, image.getWidth(), image.getHeight()));``````

The small blue dot in the upper left shows the location of the "location" variable. Any idea why the two rectangles are different?

Can you set a breaking point on "Shape bounds= " to find location.x & location.y between "green" ?

Albert