与 Facet_iterator 和原始 ID 的 CGAL 三角形关联

CGAL triangle association with Facet_iterator and primitive ID

我正在尝试将 CGAL Polyhedron_3 三角形面与 Primitive::ID 关联到通过使用 Facet_iterator.

迭代获得的面数组

我使用 read_off() 函数从 .off 文件创建了一个 Polyhedron_3 三角形网格。现在,我正在使用 AABB_tree 来找到离一个点最近的三角形。我正在成功申请 AABB_tree::closest_point_and_primitive()。但是,我找不到将 Primitive::Id 转换为与该方面对应的整数的方法。

为了弄清楚为什么我需要这个整数:我正在使用 Polyhedron::Facet_iterator 将所有三角形导出到一个数组以进行可视化。在另一个数组中,我想保存最近点搜索的信息。要访问正确的位置,我需要 Primitive::ID 中的相应 ID 作为整数。

我找到了一个可能的解决方案 here 并尝试实施但没有成功。

在我的 MeshModel class 中,我得到 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 到 "number of faces" 之间的整数值。而且我找不到任何关于 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);

使用

找到解决方案

typedef CGAL::Polyhedron_3<Kernel, CGAL::Polyhedron_items_with_id_3> Polyhedron;

读入 .off 文件后,我正在设置 ID

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

然后,在 closest_point_and_primitive() 之后,我使用 Primitive::ID 获取 ID,它实际上是 Facet_handle:

int getFacetIndex(Polyhedron::Facet_handle &handle) {
  int facet_id;
  facet_id = handle->id();
  return facet_id;
}