Объединение, пересечение и различие между 3D-объектами JavaFX

#javafx #3d #mesh #shapes #java-3d

Вопрос:

Существует ли какой-либо способ выполнения логических операций, таких как объединение, пересечения и различие между 3D-объектами JavaFX, скажем, например, между экземпляром Сферы, экземпляром цилиндра и экземпляром коробки.

2D-объекты JavaFX, которые наследуются от класса Shape, уже имеют методы объединения() и вычитания() http://docs.oracle.com/javase/8/javafx/api/javafx/scene/shape/Shape.html

Мне было интересно, есть ли такая вещь для объектов Shape3D в JavaFX или в библиотеке F(X)yz. Если нет, я хотел бы знать о лучшем способе реализации этих операций.

С уважением,

Комментарии:

1. Используя формы по умолчанию, простой ответ-НЕТ. Нет доступа к данным сетки. Есть проект github.com/miho/JCSG это предлагает такие функции.

Ответ №1:

Как говорит @jdub1581, в JavaFX нет прямого способа получить логические операции с 3D-примитивными формами.

Это не означает, что эти операции не могут быть выполнены, если вы знаете или предоставляете информацию о сетке.

В то время как библиотека F(X)yz имеет множество сложных 3D-фигур, в которых полностью представлена информация о сетке, она не выполняет с ними логических операций.

3D-булевы операции являются основой для метода конструктивной геометрии твердого тела. Твердое тело CSG строится из нескольких примитивов (куб, призма, сфера, цилиндр, конус и тор) с использованием булевых операций (объединение, пересечение, различие).

Существует реализация этого метода на основе Java, JCSG. От Майкла Хоффера, его автора:

Java — реализация CSG на основе BSP (Конструктивная твердотельная геометрия). Это единственная простая и бесплатная реализация Java, о которой я знаю. В этой реализации используется оптимизированный алгоритм CSG, основанный на csg.js.

Основываясь на этой реализации, JFXScad-это проект на основе JavaFX, использующий JCSG для создания сложных фигур, готовых к 3D-печати или экспорту в формате STL/OBJ.

Используя этот проект, вы можете ввести текст на левой панели, а 3D-форма будет сгенерирована на правой. Это один из доступных образцов:

JFXcad

Как вы можете видеть, несколько рычагов созданы методом экструзии и объединены Cylinder с помощью union , difference , …