在 CGAL::Surface_mesh 中找到某个图元的所有邻居

Find all neighbours of a certain primitive in a CGAL::Surface_mesh

我在 cgal 中编写了一个带有树加速的小型光线追踪器(带有 CGAL::Surface_mesh 网格)。我想找到命中原语的所有邻居。

Ray_intersection hit = tree.first_intersection(rays[y][x]);

if(hit)
{
    const Point& point =  boost::get<Point>(hit->first);
    const Primitive_id& primitive_id = boost::get<Primitive_id>(hit->second);
    //i need the neighbours of the hit primitive
}

我该怎么做?我找到了这个文档,但它似乎只适用于点而不是原语:

https://doc.cgal.org/latest/Spatial_searching/index.html

并且它搜索它的欧几里得距离而不是连接在一起。

是否有类似的东西:

std::vector<Primitive_id&> ids = getNeighoursOfPrimive(primitive_id);

就像我说的,我正在使用 CGAL::Surface_mesh 网格作为我的网格,它们在场景中只有一个网格。

您可以使用 vertices_around_face() to get all vertices of a face, then for each vertex you can use the range returned by halfedges_around_target() 返回的范围来获得与该顶点关联的每个面的一个半边(或者您可以使用下一个和对面的组合手动完成)。