Не удалось извлечь объемы различий между триангулированными многогранниками Нефа, полученными из файлов STEP - PullRequest
0 голосов
/ 10 декабря 2018

Предположим, у нас есть многогранник, представляющий объект A , и требуется получить его вогнутости.

Вариант для этого состоит в вычислении выпуклой оболочки CH объекта A и разбиение разности CH - A на подключенные компоненты.

Для этого я попытался использовать модуль Nef Polyhedrons в CGAL .Это позволяет преобразовать A и CH в многогранники Нефа для легкого применения логических операций, таких как разность множеств.

Как только разность получена как многогранник Нефа, еетома, помеченные 1 в поле mark, должны представлять конечные связные компоненты разности и могут быть преобразованы обратно в многогранники с функцией convert_inner_shell_to_polyhedron.

Теоретически этот подход должен работать нормально, нона практике существует проблема, которая возникает, когда используемые многогранники являются результатом преобразования файла STEP в треугольную сетку, определяющую многогранник.Фактически, рассмотрим, например, четырехугольное лицо в файле STEP.Во время преобразования он должен быть преобразован как минимум в два треугольника.Проблема заключается в том, что при сохранении сгенерированных треугольников в файл, представляющий преобразованную сетку (например, файл OFF, или STL, или OBJ), они рискуют потерять свою компланарность из-за аппроксимации координат вершин.

Этовызывает, когда вычисляется разность многогранников Нефа, следующие нежелательные поведения:

  • генерируются некоторые очень тонкие объемы, потому что одна из диагоналей четырехугольника (предполагается, что четырехугольник был разбит на два треугольника) «сместились» во внутреннюю часть многогранника;
  • функция convert_inner_shell_to_polyhedron выводит сообщение об ошибке, например

    lookup_halfedge (): ошибка ввода: фасет 11 разделяет aполжесткость от вершины 2 до вершины 1 с фасетом 0.

Первое поведение не представляет большой проблемы: каждый том, преобразованный в многогранник, может быть проверен на его толщину и в конечном итоге отброшен,Второй, однако, возвращает пустой многогранник, и, насколько я знаю, нет способа получить желаемый объем.

Поэтому я прошу вас о способах решения этой проблемы.Здесь я сообщаю о некоторых наблюдениях, которые я сделал по этому поводу:

  • CGAL Многогранники позволяют использовать полигональные грани вместо треугольных, поэтому решением может быть преобразование файла STEP в полигональную сетку: это должно позволитьподдерживать копланарность точек одних и тех же граней.Однако мне не удалось найти программное обеспечение, которое выполняет преобразование без прохождения через треугольную сетку;
  • преобразует непосредственно файл STEP в экземпляр многогранника CGAL.Я думаю, что этот подход далек от того, чтобы быть доступным за разумное время:
  • , реализующий некоторый метод для исправления копланарности точек соседних граней.Это может быть практически осуществимым методом, но могут быть некоторые другие проблемы, возникающие при изменении вручную положения вершин многогранника.
...