三角网格的平面参数化违反声明

时间:2019-07-03 15:25:24

标签: c++ computational-geometry assert cgal parameterization

我正在努力在LS 2017上使用LSCM和最新的CGAL在仅标头模式下在Windows上使用VS 2017在封闭的三角形网格上生成UV坐标。我拥有的代码非常简单,因为我实际上不能拥有两个固定了接缝的顶点,所以我依赖于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

然后我在断言违规之前打印_idxdata_.size()的值,并得到了4294967294(即2^32 - 2)和{{1}的有趣结果。 } 分别。值得注意的是,所讨论的网格具有16376个三角形面,而16376 * 3 = 49128。我读了许多有关平面参数化的CGAL示例,但无济于事。

EDIT:经过进一步检查,似乎最大的数字实际上是49128返回的数字,这很有意义,因为我使用的是封闭网格。我正在研究PMP::longest_border,以在我的网格中引入虚拟接缝。

0 个答案:

没有答案