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).

Here's the picture to explain the problem

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

This article has been dead for over six months. Start a new discussion instead.