SWT GC剪切圈

时间:2019-10-29 03:11:37

标签: java swt

我想使用GC裁剪圆外的区域。

GC有setClipping (Rectangle rect),但没有用于圈子的setClipping。

有人知道怎么做吗?

2 个答案:

答案 0 :(得分:1)

您必须使用其他方法:

public void setClipping(Region region)

在这里,您必须创建一个像这样的Region:

Region region = new Region();
int r = 10;
int x = 100;
int y = 100;
// int d = (2 * r); // diameter
region.add(circle(r, (x + r), (y + r)));

其中的圆圈是以下方法:

public static int[] circle(int r, int offsetX, int offsetY) {
    int[] polygon = new int[8 * r + 4];
    // x^2 + y^2 = r^2
    for (int i = 0; i < 2 * r + 1; i++) {
        int x = i - r;
        int y = (int) Math.sqrt(r * r - x * x);
        polygon[2 * i] = offsetX + x;
        polygon[2 * i + 1] = offsetY + y;
        polygon[8 * r - 2 * i - 2] = offsetX + x;
        polygon[8 * r - 2 * i - 1] = offsetY - y;
    }
    return polygon;
}

答案 1 :(得分:1)

您可以使用GC.setClipping(Path path)

要创建代表圆形的路径,请创建一个空的Path,然后使用addArc向其添加一个圆形:

Path circlePath = new Path(gc.getDevice());
circlePath.addArc(x, y, width, height, 0.f, 360.f);
gc.setClipping(circlePath);