VTK从TXT文件中读取数据

从TXT文本文件中读取数据的方式有很多,以下介绍两种。

1.采用VTK官方提供的类vtkSimplePointsReader可以方便读取,但是该方法要求文本文件必须是规整的,如下示例读取随机点云数据。

#include <vtkSmartPointer.h>
#include <vtkSimplePointsReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
int main( )
{
  // Read the file
  vtkSmartPointer<vtkSimplePointsReader> reader =  vtkSmartPointer<vtkSimplePointsReader>::New();
  reader->SetFileName ( "Points.txt" );
  reader->Update();
 
  // Visualize
  vtkSmartPointer<vtkPolyDataMapper> mapper =  vtkSmartPointer<vtkPolyDataMapper>::New();
  mapper->SetInputConnection(reader->GetOutputPort());
 
  vtkSmartPointer<vtkActor> actor =  vtkSmartPointer<vtkActor>::New();
  actor->SetMapper(mapper);
  actor->GetProperty()->SetPointSize(4);
  actor->GetProperty()->SetColor(0.0,0.0,0.0);
 
  vtkSmartPointer<vtkRenderer> renderer =  vtkSmartPointer<vtkRenderer>::New();
  renderer->AddActor(actor);
  renderer->SetBackground(1.3, 1.6, 1.3); // Background color green
 
  vtkSmartPointer<vtkRenderWindow> renderWindow =  vtkSmartPointer<vtkRenderWindow>::New();
  renderWindow->AddRenderer(renderer);
  
 
  vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =  vtkSmartPointer<vtkRenderWindowInteractor>::New();
  renderWindowInteractor->SetRenderWindow(renderWindow);
 
  renderWindow->Render();
  renderWindowInteractor->Start();
 
  return EXIT_SUCCESS;
}
其中表示点云数据的文本文件Points.txt文件如下图所示,

编译运行的结果,如下图所示,


2.采用C++文件流的操作方式读取文件,如下所示。

#include <vtkSmartPointer.h>
#include <vtkSimplePointsReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkVersion.h>
#include <vtkVertexGlyphFilter.h>
#include <vtkPoints.h>
#include <sstream>
int main( )
{
  std::string filename = "Points.txt";
  std::ifstream filestream(filename.c_str()); //文件流
  std::string line;

  vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();

  while(std::getline(filestream, line))  //整行读取文件
  {
    double x, y, z;
    std::stringstream linestream;
    linestream << line;
    linestream >> x >> y >> z;
    points->InsertNextPoint(x, y, z); //新读取的数据赋予点的几何结构
  }
  filestream.close();  //关闭文件流操作

  // Visualize
  vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
  polyData->SetPoints(points);

  vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter =  vtkSmartPointer<vtkVertexGlyphFilter>::New();
  #if VTK_MAJOR_VERSION <= 5
    glyphFilter->SetInputConnection(polyData->GetProducerPort());
  #else
    glyphFilter->SetInputData(polyData);
  #endif
    glyphFilter->Update();

  vtkSmartPointer<vtkPolyDataMapper> mapper =  vtkSmartPointer<vtkPolyDataMapper>::New();
  mapper->SetInputConnection(glyphFilter->GetOutputPort());
 
  vtkSmartPointer<vtkActor> actor =  vtkSmartPointer<vtkActor>::New();
  actor->SetMapper(mapper);
  actor->GetProperty()->SetPointSize(4);
  actor->GetProperty()->SetColor(0.0,0.0,0.0);
 
  vtkSmartPointer<vtkRenderer> renderer =  vtkSmartPointer<vtkRenderer>::New();
  renderer->AddActor(actor);
  renderer->SetBackground(1.3, 1.6, 1.3); // Background color green
 
  vtkSmartPointer<vtkRenderWindow> renderWindow =  vtkSmartPointer<vtkRenderWindow>::New();
  renderWindow->AddRenderer(renderer);
  
 
  vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =  vtkSmartPointer<vtkRenderWindowInteractor>::New();
  renderWindowInteractor->SetRenderWindow(renderWindow);
 
  renderWindow->Render();
  renderWindowInteractor->Start();
 
  return EXIT_SUCCESS;
}
点云数据Points.txt同上,运行效果如下所示,




猜你喜欢

转载自blog.csdn.net/u013232740/article/details/50825116