当我尝试对当前g2d对象应用旋转时,它不会旋转,而是将其渲染到同一位置(在我的上下文中位于另一个顶部)。据我对Rotate方法的了解,它对当前的图形上下文应用了转换,转换了之后的任何渲染的像素(这可能就是我要出错的地方)。这是有问题的代码:
@Override
public void paint(final Graphics graphics) {
super.paint(graphics);
final Graphics2D g2d = (Graphics2D) graphics;
....
....
g2d.setColor(Color.RED);
g2d.setStroke(new BasicStroke(SMALL_LINE_THICKNESS));
if (isLattice1Drawn) {
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1));
// lattice1 and lattice2 are Polygon objects
g2d.draw(lattice1);
// This fades in the second Polygon over the first
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
// This line should rotate it, but doesn't
g2d.rotate(Math.toRadians(210));
g2d.draw(lattice2);
.....
谢谢,迈克
编辑1
作为杰夫(Jeff)的建议,我尝试只进行旋转和绘画,剩下以下代码:
@Override
public void paint(final Graphics graphics) {
super.paint(graphics);
final Graphics2D g2d = (Graphics2D) graphics;
g2d.rotate(Math.toRadians(210));
g2d.draw(lattice2);
return;
// Rest of paint .................
不幸的是,这无济于事,任何其他建议都将受到欢迎。
编辑2:
当我不调用rotate时,将渲染多边形,但是当我不执行任何操作时。谁能解释一下?
最佳答案
我从Edit 2中了解到:轮换实际上有效。但是,由于旋转是围绕原点进行的,因此多边形的旋转坐标最终在可见区域之外。您可以通过旋转较小的角度来进行测试。
然后,如果所需的操作是围绕多边形的质心旋转多边形,请改用以下Graphics2D方法:
void rotate(double theta, double x, double y)