Обрезать неструктурированную сетку и хранить данные в массивах

Я пытаюсь обрезать vtkUnstructuredGrid с помощью vtkClipDataSet. Проблема в том, что после того, как я обрежу, результирующий 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, что я хотел бы сделать. Твердое тело является исходной сеткой, а каркасная сетка является деформированной.
Пример обрезанных данных и деформированной сетки

Я использую VTK 5.10 под C ++ (Windows 8.1 64 бит, если это помогает).

Спасибо!
PS: я пытался спросить об этом в списке VTKusers, но я не получил ответа.

2

Решение

Хорошо, я нашел ошибку после комментария пользователя 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
1

Другие решения

Других решений пока нет …