Как сделать бесконечные (бесконечные) узлы в 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 обрабатывает рисование.

Посмотрите здесь для получения дополнительной информации об этом и руководство о том, как предотвратить эту проблему.

Другие вопросы по тегам