Как сделать бесконечные (бесконечные) узлы в Piccolo2D?
Я хотел бы нарисовать некоторый бесконечный объект в Piccolo2D, как бесконечная прямоугольная (декартова) сетка. Было бы здорово иметь геометрический объект в этой сетке, как в графическом редакторе.
К сожалению, Piccolo каким-то образом определяет, нужно ли вызывать краску, и не делает это соответствующим образом для меня.
Программа ниже содержит желтый объект, который я хочу сделать бесконечным. Это тип 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) он не поддерживает бесконечные двойные числа, хотя в принципе это законно; если установлено бесконечное, оно вообще ничего не рисует.
Как реализовать?
1 ответ
Это часть того, как Java обрабатывает рисование.
Посмотрите здесь для получения дополнительной информации об этом и руководство о том, как предотвратить эту проблему.