2015-11-09 1 views
1

J'essaye de découper un vtkUnstructuredGrid en utilisant vtkClipDataSet. Le problème est qu'après le clip, le vtkUnstructuredGrid résultant n'a pas les données point/cellules (les tableaux).Clip Grille non structurée et conserve les données de tableaux

Ceci est mon 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); 

-je besoin de la grille de sortie pour avoir les tableaux, parce que je voudrais afficher les valeurs sur la grille résultante. Par exemple, si les données sont des scalaires, je voudrais afficher des isovaleurs sur le maillage coupé. Si les données sont vectorielles, je voudrais déformer le maillage (warp) en direction des vecteurs de données.

Ici, j'ai un exemple sur ParaView de ce que je voudrais faire. Le solide est le maillage d'origine et le maillage filaire est celui qui est déformé. J'utilise VTK 5.10 sous C++ (Windows 8.1 64 bits, si cela peut aider).

Merci! PS: J'ai essayé de poser cette question sur la liste des VTKusers, mais je n'ai pas eu de réponse.

+0

Avez-vous quelque chose? Je ne vous vois pas mettre à jour le filtre de clip – lib

+0

@lib Oui, vous avez raison. C'est tout! Il me manque l'appel de mise à jour! Fixé! Je vous remercie! – fern17

Répondre

0

Ok, j'ai trouvé l'erreur après le commentaire de l'utilisateur lib. Il me manquait l'appel à mettre à jour après avoir défini la connexion d'entrée. Merci à tous.

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