我像示例一样通过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,但是为什么传输到网格失败!
答案 0 :(得分:0)
这意味着您的网格不是有效的流形表面。您可以使用函数is_polygon_soup_a_polygon_mesh()
进行检查,并使用orient_polygon_soup()
使其具有流形(但是某些边缘可能会重复,这会产生一些自相交)。