将多面体对象转换为 Nef_polyhedron 对象
Converting Polyhedron object to Nef_polyhedron object
我想用CGAL库来计算两个多面体的布尔差值。两个多面体都是 .off 文件的形式。我的思路是先把这两个文件读入两个Polyhedron类型变量p1和p2,然后分别用p1和p2初始化Nef_polyhedron类型变量nef1和nef2,最后求nef1和nef2的布尔差值。
我的代码如下:
#include<fstream>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Polyhedron_3.h>
#include <CGAL/Nef_polyhedron_3.h>
#include <CGAL/IO/Polyhedron_iostream.h>
#include <CGAL/draw_nef_3.h>
typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
typedef CGAL::Nef_polyhedron_3<Kernel> Nef_polyhedron;
int main() {
Polyhedron p1, p2, res;
std::ifstream fin1("blank.off");
std::ifstream fin2("svreal.off");
fin1 >> p1;
fin2 >> p2;
fin1.close();
fin2.close();
Nef_polyhedron nef1(p1);
Nef_polyhedron nef2(p2);
Nef_polyhedron nef = nef1 - nef2;
nef.convert_to_polyhedron(res);
std::ofstream fout("res2.off");
fout << res;
return 0;
}
但是,当代码执行到“Nef_polyhedron nef2(p2);
”时,抛出如下异常:boost::wrapexcept<boost::bad_any_cast>
。这可能意味着用多面体对象 p2 构造 Nef_polyhedron nef2 时出错。但是我实在想不通为什么会出现这样的错误。多面体 p1 和 p2 都有效。当我打开文件 svreal.off 时它看起来不错,它是多面体对象 p2 的 .off 文件形式。
如果您能帮我解决这个问题,我将不胜感激。
您的输入“svreal.off”包含一些退化的面孔。您可以使用 CGAL/Polygon_mesh_processing/repair_degeneracies.h
中的 CGAL::Polygon_mesh_processing::remove_degenerate_faces()
删除它们,或者直接使用 istream 中的函数 OFF_to_nef_3()
。
我想用CGAL库来计算两个多面体的布尔差值。两个多面体都是 .off 文件的形式。我的思路是先把这两个文件读入两个Polyhedron类型变量p1和p2,然后分别用p1和p2初始化Nef_polyhedron类型变量nef1和nef2,最后求nef1和nef2的布尔差值。 我的代码如下:
#include<fstream>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Polyhedron_3.h>
#include <CGAL/Nef_polyhedron_3.h>
#include <CGAL/IO/Polyhedron_iostream.h>
#include <CGAL/draw_nef_3.h>
typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
typedef CGAL::Nef_polyhedron_3<Kernel> Nef_polyhedron;
int main() {
Polyhedron p1, p2, res;
std::ifstream fin1("blank.off");
std::ifstream fin2("svreal.off");
fin1 >> p1;
fin2 >> p2;
fin1.close();
fin2.close();
Nef_polyhedron nef1(p1);
Nef_polyhedron nef2(p2);
Nef_polyhedron nef = nef1 - nef2;
nef.convert_to_polyhedron(res);
std::ofstream fout("res2.off");
fout << res;
return 0;
}
但是,当代码执行到“Nef_polyhedron nef2(p2);
”时,抛出如下异常:boost::wrapexcept<boost::bad_any_cast>
。这可能意味着用多面体对象 p2 构造 Nef_polyhedron nef2 时出错。但是我实在想不通为什么会出现这样的错误。多面体 p1 和 p2 都有效。当我打开文件 svreal.off 时它看起来不错,它是多面体对象 p2 的 .off 文件形式。
如果您能帮我解决这个问题,我将不胜感激。
您的输入“svreal.off”包含一些退化的面孔。您可以使用 CGAL/Polygon_mesh_processing/repair_degeneracies.h
中的 CGAL::Polygon_mesh_processing::remove_degenerate_faces()
删除它们,或者直接使用 istream 中的函数 OFF_to_nef_3()
。