0

i am drawing two rect in paint method. 1st rect i want to rotate it but 2nd rect i dont want to rotate it. the code i have should rotate only 1st rect but the problem is that when it rotate it missup the x, y postion of rect. this might has to do with translate but not sure. how can i fix tis?

  ///paint method
     Graphics2D g2d = (Graphics2D) g;

        AffineTransform saveAT = g2d.getTransform();

          g2d.translate(x+(width/2), y+(height/2)); 
          g2d.setTransform(saveAT); 

            g2d.rotate(Math.PI/4);

            g.drawRect(...);   //rotate this rect

            g2d.setTransform(saveAT); //rotate back?

            g.drawRect(...);  //dont rotate this rect
2
Contributors
5
Replies
26
Views
4 Years
Discussion Span
Last Post by Ezzaral
1

You are basically undoing your translation on line 7 by restoring the original transform. You are rotating the original context.

0

i removed line 7. still i am runing into same problem. do you think this is bc of what i put insdie of translate() method?

  ///paint method
     Graphics2D g2d = (Graphics2D) g;
        AffineTransform saveAT = g2d.getTransform();

          g2d.translate(x+(width/2), y+(height/2));   //set orgin in rect middle
          g2d.rotate(Math.PI/4);                      //rotate

            g.drawRect(...);   //rotate this rect

            g2d.setTransform(saveAT); //rotate back?

            g.drawRect(...);  //dont rotate this rect
1

If you translate your origin to where you want the center of the rectangle to be, are you drawing the rectangle relative to the new origin location?

If you have a rectangle centered at say (2,2) and you translate to that point and draw the rectangle with the same (x,y) values, you will now have a rectangle centered at (4,4) because you have shifted the entire coordinate system to a new location.

0

i am not sure about orgin. i am just trying to rotate the 1st rectangle and not change its x, y coordinate.

1

Since you've moved the origin to the middle of where you want the rectangle, draw the rectangle centered about the new origin.

Old rect:

g2d.drawRect(100,100,10,10);

translating to center of rect and drawing the same shape:

g2d.translate(105,105);
g2d.drawRect(-5,-5,10,10);
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.