与 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;
}
我正在尝试将 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;
}