CGAL: выходной идентификатор фасета, связанного с половиной - PullRequest
0 голосов
/ 13 июня 2019

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

void MeshModel::printFacetsOfHalfedges() {
  for (Polyhedron::Halfedge_iterator j = P_.halfedges_begin(); j != P_.halfedges_end(); ++j) {
    int id = j->facet()->id();
    std::cout << "Facet is: " << id << std::endl;
  }
}

Он начинается с Facet is: 0, а затем вылетает. Если я уберу строку std::cout << "Facet is: " << id << std::endl;, итерация будет работать нормально. Мне действительно интересно, как этот простой вывод int портит код.

Я знаю, что я мог бы также выполнять итерации по фасетам (и это прекрасно работает), но мне нужна ассоциация с полукругом <-> фасет.

Я использую CGAL :: Polyhedron_items_with_id_3 и инициализирую свои идентификаторы фасетов в начале:

void MeshModel::initializeFacetIndices() {
  std::size_t i = 0;
  for (Polyhedron::Facet_iterator facet = P_.facets_begin(); facet != P_.facets_end(); ++facet) {
    facet->id() = i++;
  }
}

1 Ответ

0 голосов
/ 13 июня 2019

Вам нужно проверить, не является ли полжедж граничным.В таком случае j->facet() == Polyhedron::Face_handle()

...