我正在开发一个应用程序来模拟一些特定问题的2D几何形状。当然,我想在屏幕上绘制该几何图形,让用户实际看到它。
JavaFX有一些2D形状,如矩形、椭圆形等。它也有三次和四次曲线,实现为贝塞尔曲线。搜索自定义形状没有帮助,因为我所找到的只是一些形状元素的例子,如路径,并将它们放在一起绘制自定义形状,如心形或菱形。搜索关于如何通过扩展shape类来实现新形状的信息就更没用了。
我要画的是任意阶任意长的B样条曲线。我知道如何计算和实现样条本身,但我不知道如何实现它们作为一个新的形状,或形状包装。
我查看了JavaFX的源代码和纪录片。似乎这些形状本身就是某种包装类。E、 g.椭圆类包含一个椭圆作为成员,它是几何体包的一部分。这种递归走得相当远。
现在,JavaFX必须使用某种方法来绘制曲线,但我找不到它。
那么,如何扩展JavaFX形状以创建例如样条线类?什么方法/类是Java绘制它的关键?
希望有人能帮帮我。
你真诚的Thorsten
我试图做类似的事情,但我没有尝试扩展Shape,而是尝试扩展PathElement。我这样做是为了实现一个nurbsTo方法,它允许我绘制NURBS或B样条曲线。PathElement是一个抽象类,希望您覆盖:
void addTo(NGPath)
它不是公共的,所以如果您想这样做,您的新类必须在javafx/scene/shape包中。所以基本上,你不能这样做。看到这篇文章,我快速地看了看写一个扩展形状的调用是否可行,正如托尔斯滕正确指出的那样,这看起来像是一条艰难的路径,所以我没有继续下去。
我采用的方法是使我的 NURBS 类生成一组 MoveTo 命令。我以足够的增量值迭代U(t)以获得足够的点,以便曲线看起来平滑。这可能是完成Thorsen发布的需求的最合理方法。如果你看看像Circle这样的东西的javafx实现,它在内部也在做同样的事情。默认情况下,Circle 类计算圆形形状上的 64 个点并绘制线条。对于大多数NURBS和B-样条曲线,我发现100个点看起来不错且平滑,但这当然取决于所使用的程度,控制点和节点。
我想看看JSilhoutte是如何实现它们的形状的。
Cross
例如,不扩展Shape
,但它通过创建两个矩形并使用Shape.union
组合它们来生成表示十字的Shape
。以下是相关方法:
@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样条曲线。
目前 Mars 支持自定义 xlog 的加密部分和长短连协议加解包部分。需要强调的是想要自定义这些扩展,需要在本地编译 Mars 才可以,编译方法见 Mars Android 接入指南 和 Mars iOS/OS X 接入指南 中的编译部分。切记,在自定义实现时,可以增加函数,但是不能删除头文件中已有的函数,也不能修改头文件中的函数原型。 自定义 xlog 加密 xlog 的具体实现可以参考微信终
当我们在开发某些东西时,经常会需要我们自己的 error 类来反映在我们的任务中可能出错的特定任务。对于网络操作中的 error,我们需要 HttpError,对于数据库操作中的 error,我们需要 DbError,对于搜索操作中的 error,我们需要 NotFoundError,等等。 我们自定义的 error 应该支持基本的 error 的属性,例如 message,name,并且最好还有
问题内容: 我正在阅读另一个SO问题,即Swift do-try-catch语法。在他的回答中, rickster 为OP的自定义类创建了扩展。 Konrad77 评论说,这是“保持代码整洁的好方法。” 我尊重他们的知识,这使我相信我在自己的代码中遗漏了一点。 除了为我创建的类创建扩展之外,还有其他好处(除了整洁)还是原因?我可以将相同的功能直接放入类中。如果我是唯一使用该类的人,或者其他人将使用
本文向大家介绍Java如何实现自定义异常类,包括了Java如何实现自定义异常类的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 自定义异常类步骤 创建一个类继承异常父类Exception 在具体的实现方法首部抛出异常类(自己创建的那个类),throws的
通过Envoy架构很容易扩展网络过滤器和HTTP过滤器。 有关如何添加网络过滤器和构建库并建立依赖关系的示例,请参见envoy-filter-example。 返回
用户自定义扩展是用户自己创建的 JavaScript 文件,对 Selenium IDE 现有的功能进行定制以及功能扩展。通常这种定制和扩展是以自定义命令的形式来体现的,当然也不仅限于命令。 这里可以找到很多有用的扩展。 注意:这部分信息已经过时,我们将很快修改。 也许最受欢迎的 Selenium IDE 扩展就是流程控制,流程控制扩展将提供 while 循环和条件判断。这个扩展是 goto_se