前几节写的内容感觉一般般,这一节来点狠货,之前我在使用VTK做项目时,总是需要用到模型布尔运算处理一些事务,但是VTK的布尔运算不忍直视,太鸡肋了,稍稍复杂一点的模型就计算不了,算法极度不稳定,所以这种情况是不能应用在项目里面的。VTK中处理布尔运算的API有vtkImplicitBoolean,vtkBooleanOperationPolyDataFilter网上教程也非常多,本人不建议使用。
但是项目中boolean运算很常用,我采用CGAL提供的Boolean算法,来处理vtkPolyData之间的交叉并布尔运算,在FreeWorld库中对CGAL进行了封装,提供了多种网格模型处理的算法。
CGAL是一个开源库,我就不进行介绍了,但是CGAL很强大,提供的算法很多,2D凸壳、3D凸壳、三角剖分、2D多边形bool运算、3D网格生成、模型表面偏置、点云三维重建、多边形网格生采样降采样、网格分割、三角网格参数化、模型骨架提取、等等。但是CGAL接口不是很友好,需要强大的C++基础才能看懂代码,好废话不多说,下面请看FreeCGAL介绍吧。
在使用前我们需要定一些数据结构,如果不重新定义这些变量,后面应用会比较麻烦。
typedef CGAL::Exact_predicates_inexact_