Как сделать отверстия в форме в Piccolo2D?
В основной 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?
1 ответ
Решение
PPath
поддерживает частный GeneralPath
Участник для своих операций. Инициализируется с WIND_NON_ZERO
, К счастью, к нему можно получить доступ PPath.getPathReference()
, Так что это должно сработать:
path_p.getPathReference().setWindingRule(Path2D.WIND_EVEN_ODD);
Вот результат: