1

メインの Java では、シェイプに穴をあけるのに役立つ「ワインディング ルール」がサポートされています。

残念ながら、この概念は Piccolo2D では無視されます。

public class Try_Holes_01 {

    @SuppressWarnings("serial")
    public static void main(String[] args) {

        final Path2D path = new Path2D.Double(Path2D.WIND_EVEN_ODD);
        //final Path2D path = new Path2D.Double(Path2D.WIND_NON_ZERO);

        path.append(new Ellipse2D.Double(100,100,200,200), false);
        path.append(new Ellipse2D.Double(120,120,100,100), false);

        JPanel panel = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                Graphics2D g2 = (Graphics2D) g;

                g2.fill(path);
            }
        };

        final PPath path_p = new PPath(path);
        path_p.setPaint(Color.BLACK);

        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());
        frame.add(panel, BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        new PFrame() {
            @Override
            public void initialize() {
                getCanvas().getLayer().addChild(path_p);
            }
        };


    }

}

ここに画像の説明を入力

では、Piccolo2D パス内に穴をあける方法は?

4

1 に答える 1

2

PPathその操作のためにプライベートGeneralPathメンバーを維持します。で初期化されWIND_NON_ZEROます。幸いなことに、でアクセスできますPPath.getPathReference()。したがって、これでうまくいくはずです:

path_p.getPathReference().setWindingRule(Path2D.WIND_EVEN_ODD);

結果は次のとおりです。

ここに画像の説明を入力

于 2013-10-27T15:39:26.537 に答える