JavaFx 2D,3D,SVG形状

JavaFx 2D,3D,SVG形状

我对下面的图片有一个一般性的问题。我对如何使用JavaFX创建这样的组件感到有些困惑。下面的舰船图形的每个部分在其自身上都充当按钮,并且也会动态更改为:“尺寸颜色等”。

我不确定是否可以使用SVG路径或2D对象动态创建此文件,还是最好使用文件2D-3D文件类型(例如“ .obj,.stl ...等”)。 如果任何人以前都遇到过这种情况,欢迎留下答案和意见进行讨论。

yf123654 回答:JavaFx 2D,3D,SVG形状

答案澄清器

当我初次阅读您的问题时,我假设它是关于选择或选择问题中图像的一部分,但可能并非如此,而仅仅是关于如何表示和绘制对象,而是与对象的一部分进行交互。如果不需要交互,则可以忽略答案的挑选部分,而只需查看形状表示部分即可。

选择

您可以通过多种方式获得上述结果。您要实现的目标的技术术语是“选择”,但是除了选择之外,还有很多其他事情可能会影响您如何表示对象,使用2D或3D系统,甚至JavaFX是否最合适。您的应用程序的框架。您可能需要3D系统,也可能需要2D系统(我不知道)。

相关信息:

PickResult

链接的领料文章中的样本处理程序:

EventHandler<MouseEvent> moveHandler = new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            PickResult res = event.getPickResult();
            // do something with the pick result.
            event.consume();
        }
}

该挑选文章使用PickResult。 PickResult可以解释2D和3D信息。在2D信息的情况下,通常仅选择的节点是相关的。对于3D拾取,它提供了其他信息,例如纹理坐标和3D拾取的脸。

便捷方法,例如setOnMouseClicked

通常在2D模式下,除了选择了哪些节点之外,您不需要太多其他信息。在这种情况下,您无需查询和查看PickResult中的所有信息。您可以使用"convenience methods"进行诸如setOnMouseClicked之类的用户交互处理。在所有节点上设置一个单击处理程序,您将能够通过其相关的单击处理程序对每个节点进行单击(类似于按钮的功能)。

对于不规则形状,您可能要确保具有setPickOnBounds(false)。另请注意,如果边界选择错误,并且您希望在不规则形状内单击以注册,则形状内部必须填充颜色(与图片不同)。如有必要,颜色可以是半透明的,但不能完全透明。这是因为如果您没有要单击的内容,则该点击将不会注册。

悬停绑定

有关在节点的悬停属性更改状态时采取措施的示例,请参见此问题的蓝精灵答案。

实施自己的点击测试

当场景图中有节点时,可以使用hit-testing的JavaFX内置系统来进行关联。

另一种替代方法是在Canvas内渲染图像而不使用场景图,然后实施自己的点击测试算法并使用它。这就是垃圾神的答案所说明的解决方案:

如果您使用painter's algorithm在画布内渲染复杂的重叠形状,则会变得很复杂。因此,我建议使用具有2D或3D形状的场景图,而不是使用画布来完成此任务。

形状表示

执行此操作的示例方法:

选择哪种表示形式取决于应用程序,因为某些表示形式更适合于不同的目的。对于您在问题中显示的图像,您似乎在同一物体上有各种orthographic projections,最好使用ParallelCamera将3D表示形式渲染到2D平面上。对于许多其他应用程序,最好使用位图2D图像。

要表示不规则的2D形状,如果您具有适当的路径信息,则可以使用SVGPath。如果您没有适当的路径信息,那么使用2D系统来表示一组复杂的图像将是一个挑战,就像您在问题中遇到的那样(即使使用路径信息也可能会给您带来挑战)。 / p>

另一个表示形状的选项是Image,它们是从位图文件(例如PNG)中读取的,这些文件具有透明的背景以允许不规则的形状。

在旁边

这个问题可能会因为不够集中而变得封闭,因为这就是像这样的问题所发生的。类似地,该答案在范围上更笼统,而不是具体,尤其是,它没有为您提供完整的代码(或什至根本没有任何代码)来为您提出的问题提供解决方案。

本文链接:https://www.f2er.com/1391569.html

大家都在问