Я пытаюсь обрезать 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, но я не получил ответа.
Хорошо, я нашел ошибку после комментария пользователя 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
Других решений пока нет …