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);
我是 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 使用基于范围和 .toStdStringstd::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);