具有Facet_iterator和原始ID

时间:2019-05-12 19:56:59

标签: c++ cgal

我正在尝试将具有Primitive :: ID的CGAL Polyhedron_3三角形构面与使用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类中,我得到了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);

1 个答案:

答案 0 :(得分:0)

使用

找到了解决方案

import json with open('updated_data.json', 'w') as fp: json.dump(json_intents_data, fp)

读取.off文件后,我要设置ID

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

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

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