我使用Nef Polyhedra进行一些3D布尔操作。我首先将一堆polyhedron_3网格转换为Nef_polyhedron_3网格,然后执行布尔操作。但是,几乎任何对Nef多面体的操作都会导致一堆Uncertain_conversion_exception。我尝试使用CGAL_PROFILE配置文件运行CGAL。这告诉我,我在两种不同的类型上得到了这个例外。这些是
GCAL::Uncertain<enum CGAL::Sign>
CGAL::Uncertain<bool>
特别是第二次被抛出很多。当将网格转换为Nef多面体时,它们都会抛出,在布尔运算期间它们自动抛出。抛出异常的调用是在Filtered_predicate
中进行的。这里处理异常并且布尔操作返回预期结果。但是,异常似乎会使操作变得相当缓慢。
我在使用visual studio 2015的Windows上使用CGAL 4.7体验了这一点。我为预处理器定义了以下符号
WIN32;
_WINDOWS;
_CRT_SECURE_NO_DEPRECATE;
_SCL_SECURE_NO_DEPRECATE;
_CRT_SECURE_NO_WARNINGS;
_SCL_SECURE_NO_WARNINGS;
_DEBUG;CGAL_USE_MPFR;
CGAL_USE_GMP;
BOOST_ALL_DYN_LINK;
CMAKE_INTDIR="Debug";
CGAL_EXPORTS;
CGAL使用以下标志构建:/GR
,/EHsc
,fp:strict
,fp:except-
,/wd4503
和/bigobj
。
此外,包含CGAL的项目使用以下标志构建:/GS
/Zc:wchar_t
/Zc:inline
/fp:precise
/Zc:forScope
/clr
/MDd
/EHa
我遗漏了一些像包含标志似乎不相关的标志。
这是预期的行为还是我能做些什么来避免它?