2013-10-27 2 views
1

В основной Java он поддерживает «правило обмотки», которое может помочь сделать отверстия в фигурах.Как сделать отверстия в форме в Piccolo2D?

К сожалению, эта концепция игнорируется в 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); 
      } 
     }; 


    } 

} 

enter image description here

Так как сделать отверстия внутри путей Piccolo2D?

ответ

2

PPath имеет частный GeneralPath член для своей деятельности. Он инициализируется WIND_NON_ZERO. К счастью, к нему можно обратиться с помощью PPath.getPathReference(). Так что это следует сделать трюк:

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

Вот результат:

enter image description here

+0

Да, я нашел, что это уже. Странно, что они игнорируют обмотку прототипа формы ... –

+0

Да, хороший улов, хотя, +1 – tenorsax