2011-06-06 51 views
0

我試圖檢測一個點是否在gwt-g2d形狀內。 有人知道這可能嗎?gwt-g2d:如何檢測點是否在形狀?

我只是可以確定點是否在上下文中的任何路徑。

可以說我有兩個矩形的上下文(A & B)並且想要確定鼠標在哪個矩形中,我該怎麼做?

 
________________________ 
| _______ _______ | 
| |  | |  | | 
| | A | | B | | 
| |_______| |_______| | 
|________________________| 

矩形只是例子,我也想確定點是否在複雜的形狀。

回答

0

您可以查找point-in-polygon問題。如果你有很多多邊形,人們也傾向於通過存儲多邊形的左邊,右邊,底部和最頂點(或者存儲圍繞多邊形的圓的半徑和中心點)來縮小可能性,以使它們可以快速確定該點是否可能位於多邊形內部。

+0

謝謝你的提示,但我搜索一個內置的功能,因爲如果我通過G2D添加一個圓弧它有可能會有其他點比我的claculatet弧。 – Wowa 2011-06-06 16:15:08

0

一些嘗試後,我通過編輯gwt-g2d源找到了解決方案。

gwt-g2d爲每個Surface創建一個帶有畫布的div。 現在我將Surface更改爲僅創建一個位置爲絕對的畫布。現在我只是創建多個畫布並使用其功能IsPointInPath。

Chnages在Surface.java:

public Surface(int width, int height) { 
      canvas = Document.get().createElement("canvas").cast(); 
      setElement(Document.get().createDivElement()); 
      getElement().appendChild(canvas); 
      canvasInitializer.init(canvas, width, height); 
      setStylePrimaryName("g2d-Surface"); 
      this.width = width; 
      this.height = height; 
      context = canvas.getContext2D(); 
    } 

TO:

public Surface(int width, int height) { 
    canvas = Document.get().createElement("canvas").cast(); 
    canvas.setAttribute("style", "position:absolute;"); 
    setElement(canvas); 
    canvasInitializer.init(canvas, width, height); 
    setStylePrimaryName("g2d-Surface"); 
    this.width = width;  
    this.height = height; 
    context = canvas.getContext2D(); 
}