Почему не удалось прочитать сетку CGAL? - PullRequest
0 голосов
/ 16 ноября 2018

Я читаю сетку (.off) по CGAL::read_off(fin,mesh), как примеры, но это не удалось!

это мой код:

#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 голосов
/ 16 ноября 2018

Это означает, что ваша сетка не является допустимой поверхностью коллектора. Вы можете использовать функцию is_polygon_soup_a_polygon_mesh(), чтобы проверить это, и orient_polygon_soup(), чтобы сделать его многообразным (но некоторые ребра могут быть дублированы, и это создаст некоторые самопересечения).

...