Pie*_*rre 3 java graphics drawing shapes affinetransform
我正在尝试扩展/翻译java.awt.使用AffineTransform进行形状,以便在定义的边界Rectangle中绘制它.
此外,我想在具有" 缩放 "参数的绘图区域中绘制它.
我尝试了各种AffineTransform连接,但我找不到正确的序列.例如,以下解决方案是错误的:
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);
Run Code Online (Sandbox Code Playgroud)
关于正确的AffineTransform的任何想法?
非常感谢
皮埃尔
需要注意的是AffineTransform转换是"在最常用的方式",这可以看作是连接在一起最后的,先出的顺序.在这个例子中可以看到效果.给定下面的序列,Shape首先旋转结果,然后缩放,最后翻译.
at.translate(SIZE/2, SIZE/2);
at.scale(60, 60);
at.rotate(Math.PI/4);
return at.createTransformedShape(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11367 次 |
| 最近记录: |