VTK+其他布尔运算库
文章目录
- 一、vtkBool
- 1.1 安装
- 1.2 使用
- 1.3 效果
- 二、CGAL
本文的主要内容:VTK内置的布尔运算类具有稳定性差、计算时间长等缺点,为了避免使用VTK内置的布尔运算,本文简单介绍了两个比较实用的库用于替代,主要涉及vtkBool和CGAL库的使用方法。
哪些人适合阅读本文:有一定VTK基础的人。
一、vtkBool
vtkbool是VTK 布尔运算功能的扩展,主要用于多边形网格上的布尔运算,比VTK自带的布尔运算更稳定。源代码地址:https://github.com/zippy84/vtkbool
1.1 安装
如果想要从源代码安装的,可以直接查看源码页面的安装步骤。如果想直接使用的话只需要下面四个文件:
![[vtkbool files.png|240]]
1.2 使用
在使用vtkBool的时候只需要在CmakeList.txt加入vtkbool的头文件、lib文件、dll文件就可以了:
# 使用vtkbool
include_directories("vtkbool-bin")
find_library(VTKBOOL_LIBRARY_RELEASE vtkBool.lib "vtkbool-bin")
file(COPY "vtkbool-bin/vtkBool.dll" DESTINATION "Release")
一个简单的使用demo:
#include <vtkSmartPointer.h>
#include <vtkCubeSource.h>
#include <vtkCylinderSource.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkPolyDataMapper.h>
#include "vtkPolyDataBooleanFilter.h"
int main (int argc, char *argv[]) {auto cube = vtkSmartPointer<vtkCubeSource>::New();cube->SetYLength(.5);auto cy = vtkSmartPointer<vtkCylinderSource>::New();cy->SetResolution(32);cy->SetHeight(1.0);cy->SetCenter(0, 0, 0);auto bf = vtkSmartPointer<vtkPolyDataBooleanFilter>::New();bf->SetInputConnection(0, cube->GetOutputPort());bf->SetInputConnection(1, cy->GetOutputPort());bf->SetOperModeToUnion();//bf->SetOperModeToDifference();//bf->SetOperModeToIntersection();bf->Update();vtkNew<vtkPolyDataMapper> mapper;mapper->SetInputData(bf->GetOutput());mapper->SetScalarVisibility(false);vtkNew<vtkActor> actor;actor->SetMapper(mapper);vtkNew<vtkRenderer> renderer;vtkNew<vtkRenderWindow> renWin;renWin->AddRenderer(renderer);renWin->SetWindowName("bool");vtkNew<vtkRenderWindowInteractor> iren;iren->SetRenderWindow(renWin);renderer->AddActor(actor);renderer->ResetCamera();renWin->SetSize(600, 600);renWin->Render();iren->Start();return EXIT_SUCCESS;
}
1.3 效果
运行demo程序,通过修改bool运算规则可以得到Union,Difference,Intersection的效果。
bf->SetOperModeToUnion();
//bf->SetOperModeToDifference();
//bf->SetOperModeToIntersection();
- Union
- Diference
- Intersection