gwt-g2d:如何检测点是否形状?

时间:2011-06-06 13:33:51

标签: java gwt shape point-in-polygon

我正在尝试检测点是否在gwt-g2d形状内。 有人知道这是怎么回事吗?

我可以确定该点是否在上下文中的任何路径中。

假设我有一个带有两个矩形(A& B)的上下文,并且想要确定鼠标在哪个矩形中,我该怎么做?

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

矩形只是示例,我还想确定这个点是否是复杂的形状。

2 个答案:

答案 0 :(得分:0)

您可以查找point-in-polygon问题。如果你有很多多边形,人们也倾向于通过存储多边形的左,右,底部和最顶点(或存储包围多边形的圆的半径和中心点)来缩小可能性,以便它们可以快速确定该点是否甚至可能在多边形内。

答案 1 :(得分:0)

经过一番尝试后,我通过编辑gwt-g2d源找到了解决方案。

gwt-g2d为每个Surface创建一个带有画布的div。 现在我将Surface更改为仅创建一个position:absolute的画布。现在我只创建多个画布并使用它的函数IsPointInPath。

Surface.java中的Chnages:

    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();
}