Нарушение утверждения при плоской параметризации треугольной сетки - PullRequest
0 голосов
/ 03 июля 2019

Я изо всех сил пытаюсь сгенерировать UV-координаты на замкнутой треугольной сетке, используя LSCM с последним CGAL в режиме только заголовка, в Windows с VS 2017. У меня довольно простой код, поскольку у меня не может быть двухфиксированные вершины для швов, так что я полагаюсь на конструктор по умолчанию SMP::Two_vertices_parameterizer_3.

typedef CGAL::Simple_cartesian<double> Kerneld;
typedef Kerneld::Point_3 Pointd;
typedef CGAL::Surface_mesh<Pointd> Meshd;
// ...
if (parameterizeMesh)
{
    std::cout << "Parameterizing mesh with Least-Squares Conformal Mapping ... " << std::endl;
    Meshd meshd;
    PMP::polygon_soup_to_polygon_mesh(vd, polys, meshd);

    SMP::LSCM_parameterizer_3<Meshd, SMP::Two_vertices_parameterizer_3<Meshd>> param;
    Meshd::Property_map<Meshd::Vertex_index, Kerneld::Point_2> uvmap = meshd.add_property_map<Meshd::vertex_index, Kerneld::Point_2>("v:uv").first;
    SMP::parameterize(meshd, param, PMP::longest_border(meshd).first, uvmap);
}

И он терпит неудачу с:

CGAL error: assertion violation!
Expression : _idx < data_.size()
File       : C:\dev\CGAL-4.14\include\CGAL/Surface_mesh/Properties.h
Line       : 206
Explanation:
Refer to the bug-reporting instructions at https://www.cgal.org/bug_report.html

Затем я напечатал значения обоих_idx и data_.size() прямо перед нарушением утверждения и получили интересные результаты 4294967294 (то есть 2^32 - 2) и 49128 соответственно.Следует отметить, что рассматриваемая сетка содержит 16376 треугольных граней, а 16376 * 3 = 49128. Я довольно застрял там;Я прочитал множество примеров CGAL, которые касаются плоской параметризации, но безрезультатно.

РЕДАКТИРОВАТЬ: при дальнейшей проверке выясняется, что наибольшее число на самом деле является числом, возвращаемым PMP::longest_border, что имеет смысл, так как я 'м с использованием замкнутой сетки.Я смотрю на Seam_mesh, чтобы ввести виртуальный шов в мою сетку.

...