将.Intersect创建的形状添加到画布中?

时间:2017-06-19 08:39:28

标签: javafx coordinates shape geometry

我正在尝试突出显示与2 Circle相交的区域:

示例1: 出于测试目的,黄点得到随机值。这些用于绘制圆圈,以及在背景中存储椭圆。在没有交集的情况下,GUI正常运行并显示: The Purple outline represents the circle

在随机值之后,形状相交。因为我似乎无法添加新的形状槽.intersect(),我只是快速sp.setContent(),并获得此图像:

这基本上显示了相交的空间和蓝色的颜色。

所有内容都是在Canvas上绘制的,基本上会执行以下操作:

Canvas canvas = new Canvas(250, 250);
....
gc = canvas.getGraphicsContext2D();
canvas.setHeight(imgTemp.getHeight());
canvas.setWidth(imgTemp.getWidth());
gc.drawImage(imgTemp, 0, 0);

以及其他一些循环来绘制形状和圆圈。 现在,交叉的代码如下:

if (!(e.equals(eT))) {
    if (e.getBoundsInParent().intersects(eT.getBoundsInParent())) {
    System.out.println("Collision detected!");
    Shape inter = Shape.intersect(e, eT);
    if(inter.getBoundsInLocal().getWidth() > 0 && 0 < inter.getBoundsInLocal().getHeight()){
    inter.setFill(BLUE);
    inter.setStrokeWidth(3);
    sp.setContent(inter);
    }
 }

我不习惯JavaFX并且只是在本周末开始为一个小项目开始真正的工作,但我猜我可能需要从画布改为其他东西才能利用这些形状?或者有没有办法将相交的形状“转换”为GraphicsContext2D可绘制的东西?

1 个答案:

答案 0 :(得分:1)

为什么不将Canvas放入一个组中,然后将形状添加到同一个组中。你为什么要坚持把所有东西都画进画布? Canvas就像其他Shapes一样只是一个节点,你可以在SceneGraph中自由混合它们。

如果您已经意识到这会导致问题,那么另一个问题就是您使用Canvas的原因。