#qt #computational-geometry #mesh #cgal #simplification
#qt #вычислительная геометрия #сетка #cgal #упрощение
Вопрос:
Я создаю приложение на QT-creator и использую CGAL для чтения файла .off как Linear_cell_complex_for_bgl_combinatorial_map_helper, упрощаю его с помощью метода edge_collapse и повторно вставляю свернутые края методом отмены
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, amp;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:
Приведенная выше ссылка является подтверждением концепции, которая позволяет отменить для CGAL::Surface_mesh
и для OpenMesh, но не для CGAL::Polyhedron_3
или a CGAL::LCC
.