Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何扩展JavaFX Shape类以实现自定义形状_Java_Javafx_Shape - Fatal编程技术网

如何扩展JavaFX Shape类以实现自定义形状

如何扩展JavaFX Shape类以实现自定义形状,java,javafx,shape,Java,Javafx,Shape,我正在开发一个应用程序来模拟一些特定于问题的二维几何体。当然,我想在屏幕上画出几何图形,让用户真正看到它 JavaFX有一些2D形状,如矩形、椭圆等。它也有三次和四次曲线,实现为贝塞尔曲线。搜索自定义形状没有任何帮助,因为我所找到的只是一些示例,例如获取一些形状元素(如路径),然后将它们组合在一起绘制自定义形状,如心形或菱形。通过扩展shape类来搜索有关如何实现新形状的信息甚至没有什么帮助 我想画的是任意阶数和长度的B样条曲线。我知道如何计算和实现样条曲线本身,但我不知道如何将它们实现为一个新

我正在开发一个应用程序来模拟一些特定于问题的二维几何体。当然,我想在屏幕上画出几何图形,让用户真正看到它

JavaFX有一些2D形状,如矩形、椭圆等。它也有三次和四次曲线,实现为贝塞尔曲线。搜索自定义形状没有任何帮助,因为我所找到的只是一些示例,例如获取一些形状元素(如路径),然后将它们组合在一起绘制自定义形状,如心形或菱形。通过扩展shape类来搜索有关如何实现新形状的信息甚至没有什么帮助

我想画的是任意阶数和长度的B样条曲线。我知道如何计算和实现样条曲线本身,但我不知道如何将它们实现为一个新的形状或形状包装

我看了JavaFX的源代码和纪录片。似乎这些形状本身就是某种包装类。例如,Ellipse类包含一个椭圆作为成员,它是geometry包的一部分。这种递归非常有效

现在JavaFX必须使用某种方法来实际绘制曲线,但我找不到它

那么,如何扩展JavaFX形状以创建例如样条线类?Java绘制它的关键是什么方法/类

我希望有人能帮助我

您诚挚的Thorsten

我想看看他们是如何实现形状的

例如,
Cross
并不扩展
Shape
,但它通过创建两个矩形并使用
Shape.union将它们组合起来,生成一个表示十字架的
形状。以下是相关的方法:

@Override
protected void calculateShape() {
        double cx = getCenterX();
        double cy = getCenterY();
        double r = getRadius();
        double n = validateRoundness(getRoundness());
        double w = validateWidth(getWidth(), r);

        double arcWH = w * n;
        Rectangle beam1 = new Rectangle(cx - r, cy - (w / 2), r * 2, w);
        Rectangle beam2 = new Rectangle(cx - (w / 2), cy - r, w, r * 2);
        beam1.setArcWidth(arcWH);
        beam1.setArcHeight(arcWH);
        beam2.setArcWidth(arcWH);
        beam2.setArcHeight(arcWH);
        Shape shape = Shape.union(beam1, beam2);

        shape.getStyleClass().addAll("silhouette", "silhoutte-cross");

        setShape(shape);
}

因此,您可以使用
Shape.union
将多个
CubicCurve
/
QuadCurve
形状组合在一起,以创建任意顺序和长度的B样条曲线。

您能否更详细地解释原因(扩展形状)还不够?我认为如果不依赖标记为“@deprecated”的API,您将无法直接扩展形状并渲染扩展的形状:“@deprecated这是一个内部API,不打算使用,将在下一个版本中删除”。@VGR With Path我将简单地将不同的形状合并为一个。这将我限制为标准形状类。例如,我只能画四度的曲线。对于并没有预构建类的所有东西,我必须使用预构建形状类创建曲线,并将曲线和线段放在一起创建和近似。