2016-07-20 3 views
1

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

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 корректно завершается и возвращает 56000, который является число вершин, которые должны были разрушились.

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

ответ

2

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

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

+0

Вы сделали свой день. Благодарю. У вас есть указатель на то, где указано это поведение в официальных документах? ^^ – Lake

+1

@Lake Существует общее объяснение [удаления элементов геометрии] (http://www.openmesh.org/media/Documentations/OpenMesh-6.2- Документы/a00060.html). К сожалению, тот факт, что 'decimate_to' не запускает сборку мусора, как представляется, документируется только комментарием исходного кода в реализации в' DecimaterT.cpp'. – jsb

+1

@Lake По состоянию на OpenMesh 6.3 соответствующая документация обновлена. – jsb

 Смежные вопросы

  • Нет связанных вопросов^_^