Graphics2D - Graphics2D对象上的旋转形状

时间:2011-11-29 15:39:16

标签: java swing graphics2d

我有一个Graphics2D对象,我用它来绘制Canvas。我在Canvas上绘制了多个形状,并且只想转换它们中的一个(或部分)。

我会尽量保持这个简单:

void render(Graphics2D g) {
    ... // Draw shape 1
    ... // Draw shape 2
    ... // Draw shape 3
}

如何在保持形状1和3完整的情况下旋转形状2?通过“旋转”我的意思是围绕其中心点旋转,我们可以将其定义为x和{ {1}}例如。

我一直在寻找一种方法来做这件事,但找不到任何可行的方式。

有没有简单的方法可以做到这一点?

3 个答案:

答案 0 :(得分:5)

不是围绕它的中心点旋转形状,而是旋转然后平移画布。要在(x, y)处围绕形状的中心旋转,首先将画布翻转(-x, -y),然后旋转画布-d度并在(0,0)处正常绘制形状。 / p>

完成后,向后旋转然后平移(注意,通过这些几何变换,顺序很重要,平移然后旋转会给你一个完全不同的结果)。

这意味着您仍然可以在任何旋转时绘制对象,而无需自己重新计算坐标。

答案 1 :(得分:2)

要旋转形状,请使用Graphics2D.rotate方法之一。

缓存用于shape 1shape 3的转换。在绘制shape 3之前,请确保将转换重置为缓存转换,因为rotate使用shape 2会改变当前的转换坐标。

步骤:

  1. 缓存当前转换
  2. 绘制shape 1
  3. 旋转
  4. 绘制shape 2
  5. 将转换设置为缓存
  6. 绘制shape 3

答案 2 :(得分:1)

    AffineTransform afx = new AffineTransform();
    afx.rotate(angleRad, s.getCenter().x, s.getCenter().y);
    //afx.rotate(angleRad);
    java.awt.Shape ss = afx.createTransformedShape(s.getPrimativeShape());
    return ss;   

s是java.awt.Shape的包装类,用它来做一些事情....但你想要的是第2行。 afx.rotate(角度, {xAnchorPoint {1}} afx.rotate围绕点旋转对象(xAnchorPoint; yAnchorPoint)。

希望这是你想要的