OpenMesh Decimater не уменьшает количество вершин

Я пытаюсь уничтожить меш, используя OpenMesh.
Я последовал тому самому примеру, который указан в документе:

    cout << "Vertices: " << mesh->n_vertices() << endl;

DecimaterT<Mesh>   decimater(*mesh);  // a decimater object, connected to a mesh
ModQuadricT<Mesh>::Handle hModQuadric;      // use a quadric module

decimater.add(hModQuadric); // register module at the decimater
decimater.initialize();       // let the decimater initialize the mesh and the
// modules
decimater.decimate_to(15000);         // do decimation

cout << "Vertices: " << decimater.mesh().n_vertices() << endl;

Метод decimate_to корректно завершает работу и возвращает 56 000, то есть количество вершин, которые должны были быть свернуты.

Тем не менее, по журналу я могу сказать, что номер вершины в сетке не изменился.
Как это возможно?

2

Решение

Децимация изменяет связность сетки, удаляя элементы (вершины, грани и т. Д.). Удаление элементов сетки в OpenMesh осуществляется путем предварительной маркировки соответствующих элементов для удаления (используя mesh.status(handle).deleted() имущество). Фактическое удаление удаленных элементов происходит только по явному запросу, путем вызова mesh.garbage_collection(), Перед сборкой мусора, mesh.n_vertices() по-прежнему включает в себя вершины, помеченные для удаления в своем количестве.

Дециматор автоматически не запрашивает сборку мусора; это оставлено для пользователя. Вставка звонка в mesh.garbage_collection() после decimater.decimate_to(...) должен решить вашу проблему.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]