Найти всех соседей определенного примитива в CGAL :: Surface_mesh - PullRequest
0 голосов
/ 16 мая 2019

Я написал небольшой трассировщик лучей (с CGAL :: Surface_mesh Mesh) с ускорением дерева в cgal.Я хотел бы найти всех соседей хитового примитива.

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 Mesh для своей сетки, и это только одна сетка в сцене.

1 Ответ

1 голос
/ 17 мая 2019

Вы можете использовать диапазон, возвращенный vertices_around_face(), чтобы получить все вершины грани, затем для каждой вершины вы можете использовать диапазон, возвращенный halfedges_around_target(), чтобы получитьполжесток на грани инцидента с этой вершиной (или вы можете сделать это вручную, используя комбинацию следующего и противоположного).

...