2017-03-27 1 views
0

Je suis nouveau sur VTK et mon but est de pouvoir stocker des informations de plusieurs fichiers dans un vecteur afin que je puisse utiliser séparément des filtres sur certains fichiers ou les afficher sur QVTKWidget.C++ VTK lire et enregistrer des données de plusieurs fichiers

Ma question est quel type de vecteur dois-je créer?

Jusqu'à présent, j'ai ceci: classe pour le lecteur qui crée mon lecteur et en le poussant en arrière:

template<class TReader> vtkDataSet *readVTKfile(std::string fileName) 
{ 
    vtkSmartPointer<TReader> reader = 
     vtkSmartPointer<TReader>::New(); 
    reader->SetFileName(fileName.c_str()); 
    reader->Update(); 
    reader->GetOutput()->Register(reader); 
    return vtkDataSet::SafeDownCast(reader->GetOutput()); 
} 

Et voici le problème avec comment puis-je utiliser pour mon vecteur:

QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Choose"), "", tr("Vtk files (*.vtk)")); 
std::vector<std::string> inputFilenames(filenames.count()); 
if (!filenames.isEmpty()) 
{ 
    for (int i = 0; i < filenames.count(); i++) 
     inputFilenames.push_back(filenames.at(i).toLocal8Bit().constData()); 
} 

std::vector<vtkDataSet*> data(inputFilenames.size()); // what type it should be? 

for (int i = 0; i < inputFilenames.size(); i++) 
{ 
    data[i] = readVTKfile<vtkGenericDataObjectReader>(inputFilenames[i]); 
} 

vtkSmartPointer<vtkPolyDataMapper> objectMapper = 
    vtkSmartPointer<vtkPolyDataMapper>::New(); 

//objectMapper->SetInputConnection(reader->GetOutputPort()); 
objectMapper->SetInputConnection(data[0]); // so then I can use it for example for showing? 

vtkSmartPointer<vtkActor> objectActor = 
    vtkSmartPointer<vtkActor>::New(); 
objectActor->SetMapper(objectMapper); 

// VTK Renderer 
vtkSmartPointer<vtkRenderer> renderer = 
    vtkSmartPointer<vtkRenderer>::New(); 
renderer->AddActor(objectActor); 

// VTK/Qt wedded 
this->qvtkWidgetLeft->GetRenderWindow()->AddRenderer(renderer); 

Répondre

0
QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Choose"), "", tr("Vtk files (*.vtk)")); 

// utiliser la gamme à base de et .toStdString si vous voulez std :: string de QString

std::vector<std::string> inputFilenames(filenames.count()); 
for(const auto& filename : filenames) { 
     inputFilenames.push_back(filename.toStdString()); 
} 

// Je ne suis pas sûr que ce soit le bon type, mais il est ce que la documentation utilise

std::vector<vtkAlgorithmOutput*> data(inputFilenames.size()); 

for (int i = 0; i < inputFilenames.size(); i++) 
{ 
    data[i] = readVTKfile<vtkGenericDataObjectReader>(inputFilenames[i]); 
} 

vtkSmartPointer<vtkPolyDataMapper> objectMapper = 
    vtkSmartPointer<vtkPolyDataMapper>::New(); 

objectMapper->SetInputConnection(data[0]); 

vtkSmartPointer<vtkActor> objectActor = 
    vtkSmartPointer<vtkActor>::New(); 
objectActor->SetMapper(objectMapper); 

// VTK Renderer 
vtkSmartPointer<vtkRenderer> renderer = 
    vtkSmartPointer<vtkRenderer>::New(); 
renderer->AddActor(objectActor); 

// VTK/Qt wedded 
this->qvtkWidgetLeft->GetRenderWindow()->AddRenderer(renderer); 
+0

Ma question était sur le point vecteur de données pas imputFilenames –

+0

@ Julia.G, ma réponse était juste mal orthographié , vous devriez utiliser vtkAlgorithmOutput * sur le vecteur de données. –

+0

Merci pour votre réponse, Im essayant d'utiliser vtkAlgorithmOutput comme vous l'avez suggéré, mais je ne sais toujours pas ce que je devrais utiliser pour convertir les informations du lecteur en –