Mise à l'échelle, de la Traduction d'une Forme d'un Rectangle à l'aide de AffineTransform

Je suis en train de l'échelle/traduire un java.awt.Forme avec AffineTransform afin de dessiner dans un Rectangle de délimitation.

En outre, je veux le peindre dans une Zone de dessin ayant une " zoom paramètre.

J'ai essayé divers enchaînements de AffineTransform mais je ne pouvais pas trouver la bonne séquence. Par exemple, la solution suivante a été mauvais:

double zoom=(...);/* current zoom */
Rectangle2D viewRect=(...)/** the rectangle where we want to paint the shape */
Shape shape=(...)/* the original shape that should fit in the rectangle viewRect */
Rectangle2D bounds=shape.getBounds2D();

double ratioW=(viewRect.getWidth()/bounds.getWidth());
double ratioH=(viewRect.getHeight()/bounds.getHeight());


AffineTransform transforms[]=
    {
    AffineTransform.getScaleInstance(zoom, zoom),
    AffineTransform.getTranslateInstance(-bounds.getX(),-bounds.getY()),
    AffineTransform.getTranslateInstance(viewRect.getX(),viewRect.getY()),
    AffineTransform.getScaleInstance(ratioW, ratioH)
    };


AffineTransform tr=new AffineTransform();
for(int i=0;i< transforms.length;++i)
    {
    tr.concatenate(transforms[i]);
    }

Shape shape2=tr.createTransformedShape(shape);
graphics2D.draw(shape2);

Une idée sur la bonne AffineTransform ?

Merci beaucoup

Pierre

OriginalL'auteur Pierre | 2010-10-01