Podemos modificar el atributo transform en el contexto Graphics2D para mover, rotar, escalar y modificar gr�ficos primitivos mientras son dibujados. El atributo transform est� definido por un ejemplar de AffineTransform.
Graphics2D proporciona varios m�todos para cambiar el atributo transform. Podemos construir un nuevo AffineTransform y cambiar el atributo transform de Graphics2D llamando al m�todo setTransform.
AffineTransform define los siguientes m�todos para hacer m�s sencilla la construcci�n de nuevas transformaciones:
- getRotateInstance
- getScaleInstance
- getShearInstance
- getTranslateInstance
De forma alternativa podemos usar uno de los m�todos de transformaci�n de Graphics2D para modificar la transformaci�n actual. Cuando se llama a uno de esos m�todos de conveniencia, la transformaci�n resultante se concatena con la transformaci�n actual y es aplicada durante el dibujado.
- rotate--para especificar un �ngulo de rotaci�n en radianes.
- scale--para especificar un factor de escala en direcciones x e y.
- shear--para especificar un factor de compartici�n en direcciones x e y
- translate--para especificar un desplazamiento de movimiento en direcciones x e y
Tambi�n podemos construir directamente un AffineTransform y concatenarlo con la transformaci�n actual llamando al m�todo transform .
El m�todo drawImage tambi�n est� sobrecargado para permitirnos especificar un AffineTransform que es aplicado a la imagen a dibujar. Especificar un transform cuando se llama a drawImage no afecta al atributo transform de Graphics2D.
� Ejemplo: Transform
El siguiente programa es el mismo que StrokeandFill, pero tambi�n
permite al usuario elegir una transformaci�n para aplicarla al objeto selecciona cuando
se dibuje.
Esta es una imagen del GUI del applet. Para ajecutar el applet, pulsa sobre ella. El applet aparecer� en una nueva ventana del navegador.
Transform.java contiene el c�digo completo de este applet.
Cuando se elige una opci�n de transformaci�n, se modifica un ejemplar de AffineTransform y se concatena con una transformaci�n de movimiento que mueve la Shape hacia el centro de la ventana. La transformaci�n resultante se pasa al m�todo setTransform para seleccionar el atributo transform de Graphics2D
switch (Transform.trans.getSelectedIndex()){ case 0 : at.setToIdentity(); at.translate(w/2, h/2); break; case 1 : at.rotate(Math.toRadians(45)); break; case 2 : at.scale(0.5, 0.5); break; case 3 : at.shear(0.5, 0.0); break; ... AffineTransform toCenterAt = new AffineTransform(); toCenterAt.concatenate(at); toCenterAt.translate(-(r.width/2), -(r.height/2)); g2.setTransform(toCenterAt);