我是VTK的新手,我的目标是能够将来自多个文件的信息存储到矢量中,这样我就可以在某些文件上单独使用过滤器或在QVTKWidget上显示它。
我的问题是我应该创建什么类型的矢量?
到目前为止我有这个: 读者的类,它正在创建我的读者并将其推回:
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);
答案 0 :(得分:0)
QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Choose"), "", tr("Vtk files (*.vtk)"));
//使用基于for和.toStdString的范围,如果你想从QString中获取std :: string
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);