Я новичок в CGAL и пытаюсь разрезать куб с произвольной поверхностной сеткой в 3d (без самопересечений, не закрытых / без объема). Цель состоит в том, чтобы получить объем, состоящий из одной «стороны» отрезанного куба, закрытой частью поверхности внутри куба.
Сама поверхность состоит из неупорядоченных треугольников, которые должны иметь одинаковый порядок намотки (постоянные нормальные направления), но не иметь информации о окрестности и могут содержать одни и те же точки несколько раз для разных треугольников.
Я пытался использовать функцию клипа, например:
CGAL::Polygon_mesh_processing::clip(cube,surface,true);
Что, конечно, не работает, потому что поверхность не закрыта (насколько я понял). Но он показывает идею о том, как должна работать операция.
Логические операции (https://doc.cgal.org/latest/Polygon_mesh_processing/index.html#title14)) также не могут быть использованы для этого, так как они рассчитаны на объемы, а поверхность не имеет объема.
Я также думал о расширении внешней поверхности, чтобы она была закрытой. Это, однако, не похоже на хороший подход.
К сожалению, мое исследование подобных проблем не было успешным.
Я почти уверен, что в CGAL есть хороший способ сделать это. Может быть, кто-то с большим опытом работы в CGAL знает, как это сделать.
Как лучше всего получить этот том?
Привет
EDIT:
Удалив лишние точки в сетке поверхности, я смог заставить клип работать. Тем не менее, я не всегда получаю правильную сторону объема, хотя порядок намотки должен давать нормали, которые указывают на внешнюю сторону.
Необходимо ли вычислять нормали и передавать их в качестве дополнительного параметра (см. здесь ) поверхности перед разрезом, чтобы всегда получать одну и ту же "внутреннюю" сторону объема?
Кроме того, функция клипа выглядит довольно медленной. Я должен сделать этот разрез для очень большого количества кубиков и разных поверхностей.
Я использую CGAL в качестве заголовка только lib и без GMP и MPFR, поскольку он разбил мое другое приложение. Насколько велико ускорение использования этих библиотек и есть ли другие приемы, которые можно использовать для ускорения вычислений, например, используя распараллеливание?
Я видел, что CGAL использует TBB от Intel. Но в заголовочных файлах, которые включены алгоритмом отсечения, CGAL_LINKED_WITH_TBB не тестируется.
Спасибо