CGAL seam_me sh: как включить шов в halfedge_descriptor границы? - PullRequest
0 голосов
/ 17 июня 2020

Я параметризую простое меня sh (см. Рисунок ниже) с помощью seam_Polyhedron_3. cpp примера CGAL 4.14.

simple example mesh

Я определил вершины, чтобы «разрезать его», которые я записал в файл шва (они l ie вдоль одной полилинии, соединяющей нижнюю и верхнюю границы):



73 75 80 120

Однако меня смущает то, что возвращает строка

halfedge_descriptor bhd = CGAL::Polygon_mesh_processing::longest_border(mesh).first;

: кажется, что она проходит только через нижнюю границу. Это я мог проверить, посчитав количество вершин на границе,

typedef typename boost::graph_traits<Mesh>::vertex_descriptor Mesh_vertex_descriptor;
Mesh_vertex_descriptor beg = source(bhd, mesh);
int i=0;
do
{
    i++;
    bhd = next(bhd, mesh);
}
while(source(bhd, mesh) != beg);
std::cout << "There were " << i << " vertices on the boundary." << std::endl;

, которое вернуло 34 (что, в свою очередь, является количеством вершин на нижней границе).

Вопрос: Как я могу изменить конструкцию bhd так, чтобы она охватывала всю (виртуальную) границу? Т.е. показанная мною итерация должна проходить через нижнюю границу, шов вверх, верхнюю границу и шов вниз и возвращать 32 + 3 + 32 + 3 = 70?

Пока я пытался найти альтернативу longest_boundary и посмотреть, есть ли возможность изменить поведение с помощью именованных параметров . Я также попытался добавить вершины на нижней и верхней границах к me sh, но это ничего не меняет, как указано в документации Seam_me sh. Изменение порядка вершин шва также не привело к видимым изменениям.

Заранее спасибо!

1 Ответ

0 голосов
/ 18 июня 2020

Комментарий @mgimeno помог мне понять, в чем дело. Я отправляю его в качестве ответа на случай, если в будущем кто-то еще запутается в структуре файлов .selection.txt (см. Также обсуждение, связанное с ).

Здесь снова я sh но с метками вершин, по которым я хочу разрезать.

mesh with labeled vertices

Совет: Чтобы найти эти числа в вашем me sh, откройте его в Meshlab и нажмите Render> Show Labels. Он хорошо работает с сетками в формате .off, но может столкнуться с проблемами с .stl, где порядок вершин не указан.

На основе документации Seam_me sh :: add_seam (..) нам нужно добавить три кромки шва. Каждому из этих ребер присваиваются номера его концов. Тогда правильный формат seam.selection.txt будет



73 75 75 80 80 120

Обратите внимание на дублирование (каждая вершина присутствует один раз как начальная точка и один раз как конечная точка) и две ведущие пустые строки.

Граница теперь имеет 70 вершин (в исходной версии моего вопроса я неоднократно отличался по одной).

...