vtkPlaneCutter是vtkCutter算法的特化,在使用vtkPlane切割同一数据集时,vtkPlaneCutter的效率会显著高于vtkCutter。
代码示例
//和vtkCutter基本一致
vtkSmartPointer<vtkPlaneCutter> planeCutter = vtkSmartPointer<vtkPlaneCutter>::New();
planeCutter->SetInputData(polyData);//数据源不变化的情况下只需设置一次
planeCutter->SetPlane(cutPlane);//vtkPlaneCutter只允许用vtkPlane来切割
planeCutter->Update();
vtkPlaneCutter在第一次Update时由于需要构建初始数据结构等,耗时会较长(即便如此,大部分情况也比vtkCutter要快一下),后续在数据源不变的情况下耗时大幅减少。
切割后数据显示
由于内部的数据结构,vtkPlaneCutter的output是一块一块的,无法直接用vtkPolyDataMapper来显示,需要使用vtkCompositePolyDataMapper。
代码示例
//主要的流程
vtkSmartPointer<vtkCompositePolyDataMapper> compositePolyDataMapper = vtkSmartPointer<vtkCompositePolyDataMapper>::New();
compositePolyDataMapper->SetInputConnection(planeCutter->GetOutputPort());//主要是这一步
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(compositePolyDataMapper);
目前存在的问题
如上所说,vtkPlaneCutter的结果类型和输入并不一致,如果需要结果中的数据,或者对结果做处理的话,需要自己做些处理,不过我对它返回的数据结构也不是很清楚,还不知道要怎么做。有大佬知道或者研究出来的话,希望可以分享一下。