Openmesh, полигональная триангуляция

Кто-нибудь знает, может ли библиотека openmesh триангулировать простой замкнутый многоугольник?

В настоящее время я создаю PolyMesh, где граница представлена ​​последовательностью вершин, определяющих простой замкнутый многоугольник. Однако, когда я сохраняю это в файле .ply, я получаю неправильные результаты. Поэтому я подумал, если указать многоугольную грань как набор треугольных граней, но для этого мне нужно сначала выполнить триангуляцию.

Мне кажется, openmesh не может этого сделать, кто-нибудь знает?

к вашему сведению. Я использую pythonm. Также стоит упомянуть, что мой полигон плоский.

В качестве примера вы можете посмотреть на следующий слой:

ply
format ascii 1.0
element vertex 6
property float x
property float y
property float z
element face 4
property list uchar int vertex_indices
end_header
-5 -5 0
5 -5 0
5 10 0
0 10 0
0 5 0
-5 5 0
3 3 4 5
3 0 1 5
3 1 2 5
3 2 3 5

Исходные вершины:

-5 -5 0
5 -5 0
5 10 0
0 10 0
0 5 0
-5 5 0

Кусок кода, создающий слой:

def test_polymesh():

    poly_mesh = om.PolyMesh()
    coords_array = \
        [
            np.array([-5.0, -5.0, 0.0]),
            np.array([5.0, -5.0, 0.0]),
            np.array([5.0, 10.0, 0.0]),
            np.array([0.0, 10.0, 0.0]),
            np.array([0.0, 5.0, 0.0]),
            np.array([-5.0, 5.0, 0.0])
        ]

    vertex_handle = []

    for v in coords_array:
        vertex_handle.append(poly_mesh.add_vertex(v))

    face_handle = poly_mesh.add_face(vertex_handle)
    poly_mesh.triangulate()

    om.write_mesh("test_polymesh.ply", poly_mesh)

person user8469759    schedule 02.07.2019    source источник
comment
Для очень простого многоугольника вы можете использовать docs.scipy. org/doc/scipy/reference/generated/ или matplotlib.org/3.1 .0/api/tri_api.html пример: stackoverflow.com/questions/45243563/, конечно, во многих случаях это не удается.   -  person Joe    schedule 02.07.2019
comment
Но это должно работать openmesh.org/media/Documentations/ OpenMesh-4.0-Документация/   -  person Joe    schedule 02.07.2019
comment
@Joe Метод триангуляции, похоже, ничего не делает. Хотя у меня что-то openmesh 1.1 (почему-то не получается установить последнюю версию). Это может быть ошибка.   -  person user8469759    schedule 02.07.2019
comment
@Joe, указанная вами функция не разбивает многоугольник на монотонные части, поэтому в некоторых случаях она все равно не работает.   -  person user8469759    schedule 02.07.2019
comment
И из документации openmesh мне кажется, что это будет работать только для выпуклых полигонов.   -  person user8469759    schedule 02.07.2019
comment
Возможно, вам это вообще не нужно. Не могли бы вы привести пример, что происходит, когда вы сохраняете как ply?   -  person Joe    schedule 02.07.2019
comment
@Joe, обновленный слоем после вызова триангуляции.   -  person user8469759    schedule 03.07.2019
comment
Что за проблемы с вершинами, они одинаковые. Вам интересно, что, например. 3 3 4 5 есть?   -  person Joe    schedule 03.07.2019
comment
Если вы откроете слой, вы увидите один треугольник, который не предполагается, если бы вы триангулировали монотонный многоугольник. Не могу сейчас прикрепить картинку.   -  person user8469759    schedule 03.07.2019
comment
Хорошо, я вижу это. Какой инструмент вы используете для создания файла ply?   -  person Joe    schedule 03.07.2019
comment
@Джо, посмотри мое обновление. Есть функция python, которая делает все.   -  person user8469759    schedule 03.07.2019
comment
Хорошо, теперь я понял. Вы были правы, это работает только для выпуклых многоугольников, так как создает веер треугольников. Я нашел запрос функции, чтобы исправить это: graphics.rwth-aachen.de :9000/OpenMesh/OpenMesh/issues/33   -  person Joe    schedule 03.07.2019
comment
Они упоминают, что алгоритм отсечения ушей реализован в OpenFlipper openflipper.org /media/Documentation/OpenFlipper-3.0/, который, похоже, связан с OpenMesh.   -  person Joe    schedule 03.07.2019
comment
Это также может быть вариант stackoverflow.com/a/17790235/7919597   -  person Joe    schedule 03.07.2019
comment
github.com/jhasse/poly2tri/tree/master/poly2tri или github.com/greenm01/poly2tri, теперь уверен, что это оригинальная реализация   -  person Joe    schedule 03.07.2019
comment
И кто-то, кто работал над оболочкой Cython для него github.com/davidcarne/poly2tri.python   -  person Joe    schedule 03.07.2019
comment
И я только что попробовал два небольших скрипта, которые обеспечивают отсечение ушей и отлично работают с вашим примером: github.com/mrbaozi/triangulation, а другой — github.com/linuxlewis/tripy/blob /master/tripy.py   -  person Joe    schedule 03.07.2019
comment
@Joe, я не могу открыть ссылку с запросом на исправление ошибки.   -  person user8469759    schedule 03.07.2019
comment
В любом случае, я хотел бы попробовать openflipper. Хотя я не могу найти быстрый способ установить его.   -  person user8469759    schedule 03.07.2019
comment
Что касается отчета об ошибке, вы можете быть за корпоративным брандмауэром, верно?   -  person Joe    schedule 03.07.2019
comment
Да, вероятно, в любом случае это ошибка.   -  person user8469759    schedule 03.07.2019
comment
Я использовал трипи, наконец. Спасибо   -  person user8469759    schedule 05.07.2019