Как я могу хранить свернутые края, используя CGAL - PullRequest
0 голосов
/ 23 февраля 2019

Я создаю приложение на QT-creator и использую CGAL для чтения .off файла как Linear_cell_complex_for_bgl_combinatorial_map_helper и упрощаю его с помощью метода edge_collapse.Я хочу сохранить список свернутых ребер, вершин инцидентов, положения точек и другую необходимую информацию для повторной вставки удаленных ребер.

мой код

namespace SMS = CGAL::Surface_mesh_simplification ;
typedef CGAL::Simple_cartesian<double> Kernel;
typedef CGAL::Linear_cell_complex_traits<3, Kernel> MyTraits;
typedef CGAL::Linear_cell_complex_for_bgl_combinatorial_map_helper<2, 3, MyTraits>::type LCC;

typedef boost::graph_traits<LCC>::vertex_descriptor vertex_descriptor;
typedef SMS::Edge_profile<LCC> Profile ;
struct Stats
{
  Stats() :  collapsed(0) {}
  std::size_t collapsed ;
} ;

struct My_visitor : SMS::Edge_collapse_visitor_base<LCC>
{

My_visitor( Stats* s) : stats(s){}
void OnCollapsed( Profile const&, vertex_descriptor )
  {
    ++ stats->collapsed;
  }

Stats* stats ;
};


    namespace SMS = CGAL::Surface_mesh_simplification ;

    SMS::Count_stop_predicate<LCC> stop(1000);
    Stats stats ;

    My_visitor vis(&stats) ;

 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(vis)
    );

 std::cout << "\nEdges collapsed: "  << stats.collapsed
            << std::endl;

Я пытался использовать Edge_collapse_visitor_base, чтобы не получить свернутые ребра, но я не знаю, как получить информацию, связанную со свернутыми ребрами.

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

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

У меня есть ветвь на github, где я использую посетителя для записи обвалов краев.И я добавил дополнительные обратные вызовы для посетителя, чтобы можно было отменить обвалы краев.Я сделал это для CGAL::Surface_mesh, а также для OpenMesh.

0 голосов
/ 25 февраля 2019

Взгляните на концепцию, которая определяет класс посетителя: EdgeCollapseSimplificationVisitor.Если вы реализуете метод OnCollapsing.Его параметр Profile const & profile содержит всю необходимую информацию.

...