为什么CGAL读取网格失败?

时间:2018-11-16 13:35:47

标签: c++ cgal cg

我像示例一样通过CGAL::read_off(fin,mesh)读取了网格(.off),但是失败了!

这是我的代码:

#include<CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Polyhedron_3.h>
#include <CGAL/IO/OFF_reader.h>
#include <vector>
#include <fstream>
#include <iostream>
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
int main(int argc, char* argv[])
{
  const char* filename ="../mesh000.off";
  std::ifstream input(filename);
  if (!input)
  {
    std::cerr << "Cannot open file " << std::endl;
    return EXIT_FAILURE;
  }
  std::vector<Kernel::Point_3> points;
  std::vector< std::vector<std::size_t> > polygons;
  if (!CGAL::read_OFF(input, points, polygons))
  {
    std::cerr << "Error parsing the OFF file " << std::endl;
    return EXIT_FAILURE;
  }

  Polyhedron mesh;
  if(!CGAL::read_off(input,mesh))
  {
      std::cerr << "Error Read OFF " << std::endl;
      return EXIT_FAILURE;
  }
  return EXIT_SUCCESS;
}

输出:

Error Read OFF

成功打开mesh000.off,但是为什么传输到网格失败!

1 个答案:

答案 0 :(得分:0)

这意味着您的网格不是有效的流形表面。您可以使用函数is_polygon_soup_a_polygon_mesh()进行检查,并使用orient_polygon_soup()使其具有流形(但是某些边缘可能会重复,这会产生一些自相交)。