5

有没有办法执行布尔运算,如 JavaFX 3D 对象之间的联合、交叉和差异,例如在 Sphere 实例、Cylinder 实例和 Box 实例之间。

从Shape 类继承的JavaFX 2D 对象已经有union() 和subtract() 方法 http://docs.oracle.com/javase/8/javafx/api/javafx/scene/shape/Shape.html

我想知道 JavaFX 或 F(X)yz 库中的 Shape3D 对象是否有这样的东西。如果不是,我很想知道实施这些操作的最佳方式。

亲切的问候,

4

1 回答 1

12

正如@jdub1581 所说,在JavaFX 中没有直接的方法来获得具有3D 原始形状的布尔运算。

这并不意味着无法执行这些操作,前提是您知道或您提供了网格信息。

虽然 F(X)yz 库有许多复杂的 3D形状,其中完全提供了网格信息,但它不会对它们执行布尔运算。

3D 布尔运算是构造实体几何技术的基础。CSG 实体由几个基元(立方体、棱柱、球体、圆柱体、圆锥体和圆环)使用布尔运算(并集、交集、差分)构造而成。

这种技术有一个基于 Java 的实现,即 JCSG。来自他的作者迈克尔·霍弗:

基于 BSP 的 CSG(构造实体几何)的 Java 实现。它是我所知道的唯一简单且免费的 Java 实现。此实现使用基于csg.js的优化 CSG 算法。

基于该实现,JFXScad是一个基于 JavaFX 的项目,使用 JCSG 创建准备好进行 3D 打印或导出为 STL/OBJ 的复杂形状。

使用此项目,您可以在左侧面板上键入,并在右侧面板上生成 3D 形状。这是可用的示例之一:

JFXcad

如您所见,几个手臂是通过挤压创建的,并与Cylinders 使用union, difference, ...

于 2015-02-24T16:08:16.767 回答