繁体   English   中英

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

[英]CGAL triangle association with Facet_iterator and primitive ID

我试图将CGAL Polyhedron_3三角形面与Primitive :: ID关联到通过使用Facet_iterator迭代得到的面的数组。

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

为了说明为什么我需要这个整数:我使用Polyhedron :: Facet_iterator将所有三角形导出到一个数组以进行可视化。 在另一个数组中,我想保存最近点搜索的信息。 要访问正确的位置,我需要将Primitive :: ID中的相应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);

找到了解决方案

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++;
  }

然后,在nearest_point_and_primitive()之后,我使用Primitive :: ID获取ID,这实际上是一个Facet_handle:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM