2013-10-27 7 views
1

메인 자바에서는 모양에 구멍을 만드는 데 도움이되는 "와인딩 규칙"을 지원합니다.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

관련 문제