2017-03-27 10 views
0

Ich bin neu in VTK und mein Ziel ist es, Informationen aus mehreren Dateien in einem Vektor zu speichern, so dass ich separat Filter für einige Dateien verwenden oder auf QVTKWidget zeigen kann.C++ VTK Lesen und Speichern von Daten aus mehreren Dateien

Meine Frage ist, welche Art von Vektor soll ich erstellen?

Bisher habe ich diese: Klasse für Reader, die meine Leser schaffen und es zurückzudrängen:

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()); 
} 

Und hier ist das Problem mit, wie kann ich es für meine Vektor verwenden:

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); 

Antwort

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

// den Bereich verwenden Basis für, und .toStdString wenn Sie wollen, std :: string von QString

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

// Ich bin mir nicht sicher, ob dies die richtige Art ist, aber es ist das, was die Dokumentation

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

Meine Frage nach Datenvektor imputFilenames nicht über –

+0

@ Julia.G war verwendet wurde meine Antwort nur vertippt , sollten Sie vtkAlgorithmOutput * auf dem Datenvektor verwenden. –

+0

Vielen Dank für Ihre Antwort, ich versuche vtkAlgorithmOutput zu verwenden, wie Sie vorgeschlagen haben, aber ich weiß immer noch nicht, was ich verwenden sollte, um Informationen aus dem Leser in das –

Verwandte Themen