C++ VTK 从多个文件中读取和保存数据

C++ VTK reading and saving data from several files

我是 VTK 的新手,我的目标是能够将来自多个文件的信息存储到一个向量中,这样我就可以分别对某些文件使用过滤器或在 QVTKWidget 上显示它。

我的问题是我应该创建什么类型的矢量?

到目前为止我有这个: class for Reader 正在创建我的 reader 并将其推回:

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

这是我如何将它用于我的矢量的问题:

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);
QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Choose"), "", tr("Vtk files (*.vtk)"));

// 如果你想从 QString

std::string 使用基于范围和 .toStdString
std::vector<std::string> inputFilenames(filenames.count());
for(const auto& filename : filenames) {
        inputFilenames.push_back(filename.toStdString());
}

// 我不确定这是否是正确的类型,但这是文档使用的类型

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