我想在 Piccolo2D 中绘制一些无限的对象,比如无限的矩形(笛卡尔)网格。在这个网格上有一些几何对象会很棒,比如在图形编辑器中。
不幸的是,Piccolo 以某种方式确定是否需要调用paint,并且没有为我适当地执行此操作。
下面的程序包含黄色对象,我想让它无穷无尽。它的类型是PEndless
. 我小时候正在给它添加圆圈。
package tests.endless;
import java.awt.Color;
import java.awt.geom.Rectangle2D;
import org.piccolo2d.PNode;
import org.piccolo2d.extras.PFrame;
import org.piccolo2d.nodes.PPath;
import org.piccolo2d.util.PPaintContext;
public class Try_PGrid {
public static class PEndless extends PNode {
@Override
protected void paint(PPaintContext paintContext) {
Rectangle2D localClip = paintContext.getLocalClip();
paintContext.getGraphics().setColor(Color.yellow);
paintContext.getGraphics().fill(localClip);
}
}
public static void main(String[] args) {
new PFrame() {
@Override
public void initialize() {
PPath circle = PPath.createEllipse(0, 0, 100, 100);
PEndless grid = new PEndless();
grid.addChild(circle);
//grid.setBounds(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); // not working at all
//grid.setBounds(-10, -10, 50, 50); // yellow until circle visible
grid.setBounds(-1000, -1000, 2000, 2000); // yellow until bounds
getCanvas().getLayer().addChild(grid);
}
};
}
}
不幸的是,我发现:
1)如果边界是默认的(空的),那么只有在圆圈可见时才会绘制黄色
2)如果边界大且有限,则黄色油漆在边界内
3) 它不支持无限双打,尽管这在原则上是合法的;如果设置为无限,它根本不绘制任何东西。
如何实施?