2015-11-09 7 views
1

Я пытаюсь обрезать 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); 

мне нужна выходная сетка, чтобы иметь массивы, потому что я хотел бы, чтобы отобразить значения на результирующую сетке. Например, если данные являются скалярами, я хотел бы отображать isovalues ​​на разрезанной сетке. Если данные являются векторными, я хотел бы деформировать сетку (warp) в направлении векторов данных.

Здесь у меня есть пример в ParaView того, что я хотел бы сделать. Твердое тело является исходной сеткой, а каркасная сетка является деформированной. Example of clipped data and the deformed mesh

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

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

+0

у вас есть что-нибудь вообще? Я не вижу, чтобы вы обновляли фильтр клипа. – lib

+0

@lib Да, вы правы. Это оно! Мне не хватает вызова обновления! Исправлена! Спасибо! – fern17

ответ

0

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