Я параметризую простую сетку (см. рисунок ниже) с помощью 8cpp-example.html" rel="nofollow noreferrer">seam_Polyhedron_3. cpp пример CGAL 4.14.
Я определил вершины для «разрезания», которые я записал в файл шва (они лежат вдоль одной полилинии, соединяющей нижнюю и верхнюю границу):
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 и посмотрите, есть ли возможность изменить поведение через именованные параметры . Я также пробовал добавлять вершины на нижней и верхней границах сетки, но это ничего не меняет, как указано в документации Seam_mesh. Изменение порядка вершин шва также не дало видимых изменений.
Заранее спасибо!
mesh
сеткой шва или основной сеткой поверхности? Вы проверили, что ваш файл полилинии был правильно прочитан? Вы пытались добавить его вручную с помощьюSeam_mesh::add_seam()
? Я действительно не думаю, что это проблема поведенияlongest_boundary()
, либо это ошибка, либо ваша сетка шва не такая, как вы думаете. - person mgimeno   schedule 18.06.2020mesh
— это seam_mesh. Я попробую добавить шов вручную. Как проверить правильность полилинии? Все, о чем я сейчас могу думать, это попытаться напечатать координаты его вершин. - person Dominik Mokriš   schedule 18.06.2020std::ifstream in("yourfile.txt"); if(!in) std::cerr<<"file not found"<<std::endl;
- person mgimeno   schedule 18.06.2020add_seams
полуребро. Я не хотел выкладывать пример (он из документации и тогда вопрос был бы довольно длинным), но, наверное, было бы лучше, потому что перед нами был бы исходный код. - person Dominik Mokriš   schedule 18.06.2020