VTK boolean operation 使用方法
来源:互联网 发布:wlan 数据分流技术 编辑:程序博客网 时间:2024/06/04 18:40
在使用VTK的boolean operation时,仅仅接受从polydata数据结构中通过shallow copy或者直接获取数据中的polydata作为输入,才能够正确地进行布尔运算。这个类不同于其他的类,可以直接使用filter的流处理模式来进行,即通过SetInputConnection()和GetOutputPort()来获得。
并且VTK的boolean operationa中,仅仅能够处理两个三角面片交点为2或者更小的情况。对于两个三角面片共面的情况,交点情况将会变得更加复杂。因此,在处理共面三角面片之间的布尔运算时,其运算将会出现问题。
从VTK网站中获得的实例如下:
int main(int argc, char *argv[]){ vtkSmartPointer<vtkPolyData> input1; vtkSmartPointer<vtkPolyData> input2; vtkSmartPointer<vtkSphereSource> sphereSource1 = vtkSmartPointer<vtkSphereSource>::New(); sphereSource1->SetCenter(.25, 0, 0); sphereSource1->Update(); input1 = sphereSource1->GetOutput();// use the polydata as input vtkSmartPointer<vtkSphereSource> sphereSource2 = vtkSmartPointer<vtkSphereSource>::New(); sphereSource2->Update(); input2 = sphereSource2->GetOutput(); vtkSmartPointer<vtkBooleanOperationPolyDataFilter> booleanOperation = vtkSmartPointer<vtkBooleanOperationPolyDataFilter>::New(); if (operation == "union") { booleanOperation->SetOperationToUnion(); } else if (operation == "intersection") { booleanOperation->SetOperationToIntersection(); } else if (operation == "difference") { booleanOperation->SetOperationToDifference(); } else { std::cout << "Unknown operation: " << operation << std::endl; return EXIT_FAILURE; }#if VTK_MAJOR_VERSION <= 5 booleanOperation->SetInputConnection( 0, input1->GetProducerPort() ); booleanOperation->SetInputConnection( 1, input2->GetProducerPort() );#else booleanOperation->SetInputData( 0, input1 ); // set the input data booleanOperation->SetInputData( 1, input2 );#endif vtkSmartPointer<vtkPolyDataMapper> booleanOperationMapper = vtkSmartPointer<vtkPolyDataMapper>::New(); booleanOperationMapper->SetInputConnection( booleanOperation->GetOutputPort() ); booleanOperationMapper->ScalarVisibilityOff(); vtkSmartPointer<vtkActor> booleanOperationActor = vtkSmartPointer<vtkActor>::New(); booleanOperationActor->SetMapper( booleanOperationMapper ); vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->AddViewProp(booleanOperationActor); renderer->SetBackground(.1, .2, .3); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer( renderer ); vtkSmartPointer<vtkRenderWindowInteractor> renWinInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); renWinInteractor->SetRenderWindow( renderWindow ); renderWindow->Render(); renWinInteractor->Start(); return EXIT_SUCCESS;}
0 0
- VTK boolean operation 使用方法
- VTK帮助文档使用方法
- view的boolean onKeyDown()使用方法
- Boolean
- VTK
- VTK
- vtk
- vtk
- vtk
- VTK
- 27 新型适配器bind的使用方法(学自Boolean)
- operation
- Boolean还是boolean?
- Boolean与boolean
- Boolean和boolean
- boolean和Boolean区别
- 【VTK】cmake编译VTK
- 【VTK】VTK Cilpping
- 第一篇
- 应对sql语句中出现的引号问题
- ext 在Window窗口中添加Panel添加htmleditor无法显示下拉字体选择
- linux--shell中$参数提取
- android httpclient 设置超时
- VTK boolean operation 使用方法
- VC开发中三种调试技术
- android中include和merge标记的区别和使用
- socket failed: EACCES (Permission denied)
- 网桥的功能和分类
- TURN概述.
- IOS icon的尺寸
- 破解linux root密码
- UEditor | 百度富文本使用