isaacs / github

Just a place to track issues and feature requests that I have for github
2.2k stars 129 forks source link

CGAL - cannot use import_from_polyhedron_3 #1481

Closed n-m-ya closed 5 years ago

n-m-ya commented 5 years ago

I want to simplify a surface read from .off file and view it using CGAL. I read the surface as Polyhedron_3 and I want to convert it to Linear_cell_complex_for_combinatorial_map to view it but there is a problem in import_from_polyhedron_3 method

my code:

typedef CGAL::Linear_cell_complex_for_combinatorial_map<2,3> LCC_3;
 typedef LCC_3::Dart_handle Dart_handle;

typedef CGAL::Exact_predicates_inexact_constructions_kernel  Kernel;
typedef CGAL::Polyhedron_3<Kernel>                       Polyhedron;
 QWidget* viewer ;
   QString fileName;

 LCC_3 lcc;
   QMainWindow qWin;
  CGAL::DefaultColorFunctorLCC fcolor;

  Polyhedron P;

void MainWindow::fileOpen()
{
   fileName = QFileDialog::getOpenFileName(this,tr("Select object"), ".", tr("*.off"));
std::ofstream out(fileName.toLocal8Bit());
    out<<P;
 QWidget* centralWidget = new QWidget(viewer);
           centralWidget->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum);
   CGAL::import_from_polyhedron_3<LCC_3, Polyhedron>(lcc, P); 
           setCentralWidget( new CGAL::SimpleLCCViewerQt<LCC_3, CGAL::DefaultColorFunctorLCC>(&qWin ,
                       lcc,
                       "Basic LCC Viewer",
                       false,
                        fcolor ) );
     show();
}

void MainWindow ::simplify()
{

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

    if (ok){
        int r = P.size_of_vertices() - n;
        int target_edges = P.size_of_halfedges()/2 - r*3;
    n=target_edges+1;
    }

    typedef CGAL::Polyhedron_3<Kernel> Surface;

    SaveOFF("temp.off");
    namespace SMS = CGAL::Surface_mesh_simplification ;
    Surface surface;
    std::ifstream is("temp.off") ; is >> surface ;

    // This is a stop predicate (defines when the algorithm terminates).
    // In this example, the simplification stops when the number of undirected edges
    // left in the surface drops below the specified number (1000)
    SMS::Count_stop_predicate<Surface> stop(n);

    int r = SMS::edge_collapse
              (surface
              ,stop
               ,CGAL::parameters::vertex_index_map(get(CGAL::vertex_external_index,surface))
                                 .halfedge_index_map  (get(CGAL::halfedge_external_index  ,surface))

);
    std::ofstream os("temp.off"); os << surface ;
    OpenOFF("temp.off");

    std::cout << "Finished..." << r << " edges removed."<<std::endl;
    std::cout<<P.size_of_vertices()<<" Vertices"<<std::endl;
    std::cout<<P.size_of_facets()<<" Facets"<<std::endl;
    std::cout<<P.size_of_halfedges()<<" Halfedges"<<std::endl;

 }

it shows me the following error: ‘import_from_polyhedron_3’ is not a member of ‘CGAL’ CGAL::import_from_polyhedron_3(lcc, P); and I don't know how to reload the surface in the viewer after simplifying it

I need any help please thanks

cirosantilli commented 5 years ago

This repository is only for issues about GitHub itself, please open an issue on the tracker of that project or Stack Overflow instead.