【问题标题】:how can I undo the collapsed edges in a specific region using CGAL如何使用 CGAL 撤消特定区域中的折叠边缘
【发布时间】:2019-03-26 16:37:45
【问题描述】:

我正在 QT-creator 上创建一个应用程序并使用 CGAL 将 .off 文件读取为 Linear_cell_complex_for_bgl_combinatorial_map_helper ,使用 edge_collapse 方法对其进行简化并通过 undo 方法重新插入折叠的边缘

void MainWindow ::simplify()
{

    SMS::Edge_collapse_recorder <LCC,My_visitor> recorder(lcc);
    State state;
   My_visitor mvis(state, lcc);

  bool ok;
 int n = QInputDialog::getInt(this, "", tr("Number of vertices in each cell:"),lcc.number_of_darts(),0, lcc.number_of_darts(),1, &ok);

 if (ok){
    n=lcc.number_of_halfedges()/2 - 1;
   }

 SMS::Count_stop_predicate<LCC> stop(n);

 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>()).visitor(recorder.visitor(mvis)));

    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;


     recorder.undo(mvis);
     std::cout<<"re insert "<<std::endl;
     lcc.display_characteristics(std::cout)<<", is_valid="<<CGAL::is_valid(lcc)<<std::endl;


 }

关于以下内容的任何想法或有用的链接: - 仅在特定区域重新插入折叠边缘,而不是所有折叠边缘?

感谢您的帮助。

【问题讨论】:

    标签: qt computational-geometry mesh cgal simplification


    【解决方案1】:

    上面的链接是一个概念证明,它可以撤消 CGAL::Surface_mesh 和 OpenMesh,但不能撤消 CGAL::Polyhedron_3CGAL::LCC

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-12
      • 2017-04-14
      • 1970-01-01
      • 2018-10-06
      • 2012-09-11
      • 2018-10-30
      • 2015-04-25
      • 2018-09-24
      相关资源
      最近更新 更多