Как перебрать мезо-скелет в CGAL? - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь получить промежуточный скелет из инструмента скелетизации CGAL с классом Meso_skeleton.
Проблема в том, что я хочу перебрать его вершины и грани, но не могу понять, какой класс является итератороми поэтому я получаю ошибки компиляции (также, похоже, ключевое слово auto не работает в итераторе, давая ошибки компиляции, потому что компилятор не может влиять на тип).

Кроме того, кажется, что документация CGALутечка информации о том, как использовать класс Meso_skeleton, так что если кто-то знает место, где я могу найти какую-то другую информацию, было бы здорово.

Код, который я пытаюсь запустить, выглядит следующим образом:


Skeleton skeleton;
Skeletonization mcs(tmesh);


Triangle_mesh contractedMesh; // prova a creare una nuova mesh dalla Skeletonization

mcs.set_is_medially_centered(true);
// 1. Contract the mesh by mean curvature flow.
mcs.contract_geometry();
// 2. Collapse short edges and split bad triangles.
mcs.collapse_edges();
mcs.split_faces();
// 3. Fix degenerate vertices.
mcs.detect_degeneracies();
// Perform the above three steps in one iteration.
mcs.contract();
auto meso = mcs.meso_skeleton();

output.open("verticesTest.cgal");

int number_of_vertices = 0;
CGAL::Polyhedron_3<Kernel>::Vertex_iterator ptr;
for( ptr = meso.vertices_begin; ptr != meso.vertices_end; ptr++)
{
    output << ptr->point << std::endl;
    ++number_of_vertices;
}

Целью этого кода является экспорт вершины и граней meso_skeleton из промежуточных шагов инструмента Skeletonization из CGAL (mean_curvature_flow_skeleton).Дайте мне знать, если можно написать лучшее решение (возможно, с некоторыми функциями CGAL, которые я игнорирую).

Спасибо

1 Ответ

0 голосов
/ 12 июля 2019

Как задокументировано здесь , мезоскелет является моделью [FaceListGraph].Вы можете перебирать грани, используя диапазон faces(mcf_skel.meso_skeleton()), полжунки, используя halfedges(mcf_skel.meso_skeleton()) и аналогично для вершин.Для доступа к точкам вам нужно позвонить boost::get(boost::vertex_point, mcf_skel.meso_skeleton(), v) с va vertex.

...