剪辑非结构化网格并保留数组数据

时间:2015-11-09 08:51:43

标签: c++ vtk clip

我正在尝试使用vtkClipDataSet剪辑vtkUnstructuredGrid。问题是我剪辑后,生成的vtkUnstructuredGrid没有点/单元格数据(数组)。

这是我的代码:

vtkSmartPointer<vtkUnstructuredGrid> model = reader->GetOutput();
// this shows that model has one point data array called "Displacements" (vectorial of 3 components)
model->Print(std::cout); 

// Plane to cut it
vtkSmartPointer<vtkPlane> plane = vtkSmartPointer<vtkPlane>::New();
plane->SetOrigin(0.0,0.0,0.0); plane->SetNormal(1,0,0);

// Clip data
vtkSmartPointer<vtkClipDataSet> clipDataSet = vtkSmartPointer<vtkClipDataSet>::New();
clipDataSet->SetClipFunction(plane);
clipDataSet->SetInputConnection(model->GetProducerPort());
clipDataSet->InsideOutOn();
clipDataSet->GenerateClippedOutputOn();

//PROBLEM HERE. The print shows that there aren't any arrays on the output data
clipDataSet->GetOutput()->Print(std::cout);

我需要输出网格来拥有数组,因为我想在结果网格上显示值。 例如,如果数据是标量,我想在切割网格上显示等值。如果数据是矢量的,我想在数据向量的方向上变形网格(扭曲)。

这里我有一个关于ParaView的例子我想做什么。实体是原始网格,线框网格是变形网格。 Example of clipped data and the deformed mesh

我在C ++下使用VTK 5.10(Windows 8.1 64位,如果有帮助的话)。

谢谢! PS:我试过在VTKusers列表上问过这个,但我没有回答。

1 个答案:

答案 0 :(得分:1)

好的我在用户lib的评论后发现了错误。设置输入连接后,我错过了更新的调用。 谢谢大家。

// Clip data
vtkSmartPointer<vtkClipDataSet> clipDataSet = vtkSmartPointer<vtkClipDataSet>::New();
clipDataSet->SetClipFunction(plane);
clipDataSet->SetInputConnection(model->GetProducerPort());
clipDataSet->InsideOutOn();
clipDataSet->GenerateClippedOutputOn();
clipDataSet->Update(); // THIS is the solution