Search code examples
c++vtkclip

Clip Unstructured grid and keep arrays data


I'm trying to clip a vtkUnstructuredGrid using vtkClipDataSet. The problem is that after I clip, the resulting vtkUnstructuredGrid doesn't have the point/cells data (the arrays).

This is my code:

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);

I need the output grid to have the arrays, because I would like to display the values on the resulting grid. For example, if the data are are scalars, I would like to display isovalues on the cutted mesh. If the data is vectorial, I would like to deform the mesh (warp) in the direction of the data vectors.

Here I have an example on ParaView of what I would like to do. The solid is the original mesh and the wireframe mesh is the deformed one. Example of clipped data and the deformed mesh

I'm using VTK 5.10 under C++ (Windows 8.1 64 bits, if that helps).

Thank you! PS: I tried asking this on the VTKusers list, but I got no answer.


Solution

  • Ok I found the error after the comment of user lib. I was missing the call to update after I set the inputconnection. Thank you all.

    // 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