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

Tho*_*itz 6 java javafx shape

我正在开发一个应用程序,以模拟某些特定于问题的2D几何体.当然,我想在屏幕上绘制该几何图形,供用户实际看到它.

JavaFX有一些2D形状,如矩形,椭圆等.它还有立方和四次曲线,实现为贝塞尔曲线.搜索自定义形状并没有帮助,因为我发现的所有内容都是采用路径等形状元素并将它们组合在一起绘制自定义形状(如心形或菱形)的示例.通过扩展Shape类来搜索有关如何实现新形状的信息甚至没那么有用.

我想要绘制的是任意顺序和长度的B样条曲线.我知道如何计算和实现Splines本身,但我不知道如何将它们实现为新的Shape或Shape Wrapper.

我查看了JavaFX的源代码和纪录片.似乎这些形状本身就是某种包装类.例如,Ellipse类包含一个椭圆作为成员,它是几何包的一部分.这种递归相当远.

现在必须有一些JavaFX用来实际绘制曲线的方法,但我找不到它.

那么如何扩展JavaFX Shape以创建例如Spline类?Java绘制它的关键是什么方法/类?

我希望有一个人可以帮助我.

你真诚的托尔斯滕

hud*_*onb 1

我想看看JSilhoutte如何实现它们的形状。

Cross例如,不扩展Shape,但它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);
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以将多个/形状Shape.union组合在一起来创建任意阶数和长度的 B 样条曲线。CubicCurveQuadCurve