Я пытаюсь связать грани треугольника CGAL Polyhedron_3 с Primitive :: ID с массивом фасетов, полученных путем итерации с помощью Facet_iterator.
У меня есть треугольная сетка Polyhedron_3, созданная из файла .off с помощью функции read_off()
. Теперь я использую дерево AABB_tree, чтобы найти ближайший треугольник к точке. Я успешно подаю заявку AABB_tree::closest_point_and_primitive()
. Однако я не смог найти способ преобразовать Primitive :: Id в целое число, соответствующее фасету.
Чтобы было понятно, зачем мне нужно это целое число: я использую Polyhedron :: Facet_iterator, чтобы экспортировать все треугольники в массив для визуализации. В другом массиве я хотел бы сохранить информацию из поиска ближайшей точки. Чтобы получить доступ к нужной позиции, мне нужен соответствующий идентификатор из Primitive :: ID в виде целого числа.
Я нашел возможное решение здесь и попытался реализовать его безуспешно.
В моем классе MeshModel я получаю Facet_iterator:
Polyhedron::Facet_iterator MeshModel::getFacetIterator() {
return P_.facets_begin();
}
После использования closest_point_and_primitive()
:
cgal::Polyhedron::Facet_iterator iterator = mesh_model->getFacetIterator();
int triangle_id = &(*ppid.second) - &(*iterator);
associations.triangles_to.push_back(triangle_id);
Не уверен, что я здесь делаю неправильно или есть лучшее решение, чтобы получить целочисленные значения между 0 и "числом граней". И я не могу найти документацию о том, что на самом деле Primitive :: Id.
Это сообщение об ошибке, которое я сейчас получаю:
error: request for member ‘push_back’ in ‘associations::Associations::triangles_to’, which is of non-class type ‘int [0]’
associations.triangles_to.push_back(triangle_id);