
Note that these calls to rotate() rotate the coordinate system about the origin.
Ther e is also a three-argument version of the method that rotates about a specified
point, which can often be more useful.
The final transformation method defined by
Graphics2D is shear(). The effects of
this method are not as intuitive as the methods we’ve already discussed. After a
call to
shear(), any rectangles you draw appear skewed, as parallelograms.
Any calls you make to
translate(), scale(), rotate(), and shear() have a
cumulative effect on the mapping from user space to device space. This mapping
is encapsulated in a
java.awt.geom.AffineTransform object and is one of the
graphics attributes maintained by a
Graphics2D object. You can obtain a copy of
the current transform with
getTransform(), and you can set a transform dir ectly
with
setTransform(). setTransform() is not cumulative. It simply replaces the
curr ent user-to-device-space mapping with a new mapping:
AffineTransform t = g.getTransform(); // Save the current transform
g.rotate(theta); // Change the transform
g.drawRect(100, 100, 200, 200); // Draw something
g.setTransform(t); // Restore the transform to its old state
AffineTransform is used in a number of places in the Java 2D API; we’ll discuss it
in more detail later in this chapter. Once you understand the details and some of
the math behind this class, you can define
AffineTransform objects of your own ...