Как я могу отменить свернутые края в определенной области, используя CGAL - PullRequest
0 голосов
/ 26 марта 2019

Я создаю приложение на 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;


 }

Любые идеи или полезные ссылки о: вставлять свернутые ребра только в определенную область, не все свернутые ребра?

Я ценю любую помощь.

1 Ответ

0 голосов
/ 27 марта 2019

Ссылка выше является подтверждением концепции, которая позволяет отменить для CGAL::Surface_mesh и для OpenMesh, но не для CGAL::Polyhedron_3 или CGAL::LCC.

...