C++ 用CGAL简化组合映射

C++ 用CGAL简化组合映射,c++,qt,graphics,computational-geometry,cgal,C++,Qt,Graphics,Computational Geometry,Cgal,我想使用CGAL将从.off文件读取的网格简化或边折叠为组合贴图 std::ifstream ifile(fileName.toStdString().c_str()); if (ifile) { CGAL::load_off(lcc, ifile); lcc.display_characteristics(std::cout)<<", is_valid="<<CGAL::is_valid(lcc)<<st

我想使用CGAL将从.off文件读取的网格简化或边折叠为组合贴图

 std::ifstream ifile(fileName.toStdString().c_str());
     if (ifile)
     {
        CGAL::load_off(lcc, ifile);
        lcc.display_characteristics(std::cout)<<", is_valid="<<CGAL::is_valid(lcc)<<std::endl;

     }
  namespace SMS = CGAL::Surface_mesh_simplification ;

    SMS::Count_stop_predicate<LCC> stop(lcc.number_of_halfedges()/2 - 1);

 int r = SMS::edge_collapse
   (lcc
    ,stop
    ,CGAL::parameters::halfedge_index_map(get(CGAL::halfedge_index, lcc))
             .vertex_index_map(get(boost::vertex_index, lcc))
             .get_cost(SMS::Edge_length_cost<LCC>())
   .get_placement(SMS::Midpoint_placement<LCC>())
    );

    std::cout << "\nFinished...\n" << r << " edges removed.\n"
               << (lcc.number_of_darts()/2) << " final edges.\n" ;

     lcc.display_characteristics(std::cout)<<", is_valid="<<CGAL::is_valid(lcc)<<std::endl;
该方法什么都不做,我尝试了更多的.off文件,它可以正确地预览它,但它不能简化它
非常感谢您的帮助。

请看下面给出的示例,它非常有效

尝试更改停止谓词参数或使用其他谓词(读取文档)。@gdamiand我尝试了SMS::Count\u stop\u predicate stop(1000);但它不起作用,再试试。。。我刚刚运行了这里给出的示例,效果非常好。谢谢你,我发现了问题,我使用读取而不是加载,它解决了问题。你知道如何存储删除的边以再次插入它们吗?请参阅;可以定义自己的函子来存储折叠边的列表。但这还不够,您还需要存储其他信息(事件顶点、点的位置…)是否有用于获取(事件顶点、点的位置…)的CGAL函数?
    #Darts=16674, #0-cells=2775, #1-cells=8337, #2-cells=5558, #ccs=1, is_valid=1
Finished...
0 edges removed.
8337 final edges.
    #Darts=16674, #0-cells=2775, #1-cells=8337, #2-cells=5558, #ccs=1, is_valid=1