vtk实战(十一)—自定义分隔符读取文本
来源:互联网 发布:linux c语言 文件路径 编辑:程序博客网 时间:2024/06/05 03:22
本例读取坐标和法向量的纯文本文件(X、Y、Z、 NX、NY、NZ)并显示在屏幕上。本例主要用到的类:
vtkDelimitedTextReader()
该类自定义分隔符,分割ASCII或Unicode文本文件。
#include <vtkVersion.h>#include <vtkSmartPointer.h>#include <vtkProperty.h>#include <vtkPolyDataMapper.h>#include <vtkActor.h>#include <vtkDelimitedTextReader.h>#include <vtkDoubleArray.h>#include <vtkTable.h>#include <vtkPointData.h>#include <vtkRenderWindow.h>#include <vtkRenderWindowInteractor.h>#include <vtkRenderer.h>#include <vtkVertexGlyphFilter.h>int main(){ std::string inputFilename = "example.txt"; vtkSmartPointer<vtkDelimitedTextReader> reader = vtkSmartPointer<vtkDelimitedTextReader>::New(); reader->SetFileName(inputFilename.c_str()); reader->DetectNumericColumnsOn(); reader->SetFieldDelimiterCharacters(" "); reader->Update(); vtkTable* table = reader->GetOutput(); vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); vtkSmartPointer<vtkDoubleArray> normals = vtkSmartPointer<vtkDoubleArray>::New(); normals->SetNumberOfComponents(3); //3d normals (ie x,y,z) std::cout << "Table has " << table->GetNumberOfRows() << " rows." << std::endl; std::cout << "Table has " << table->GetNumberOfColumns() << " columns." << std::endl; for (vtkIdType i = 0; i < table->GetNumberOfRows(); i++) { std::cout << "x: " << (table->GetValue(i, 0)).ToDouble() << " y: " << (table->GetValue(i, 1)).ToDouble() << " z: " << (table->GetValue(i, 2)).ToDouble(); points->InsertNextPoint((table->GetValue(i, 0)).ToDouble(), (table->GetValue(i, 1)).ToDouble(), (table->GetValue(i, 2)).ToDouble()); double n[3]; n[0] = (table->GetValue(i, 3)).ToDouble(); n[1] = (table->GetValue(i, 4)).ToDouble(); n[2] = (table->GetValue(i, 5)).ToDouble(); std::cout << " n: " << n[0] << " " << n[1] << " " << n[2] << std::endl; normals->InsertNextTuple(n); } std::cout << "There are " << points->GetNumberOfPoints() << " points." << std::endl; vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New(); polydata->SetPoints(points); polydata->GetPointData()->SetNormals(normals); vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New(); glyphFilter->SetInputConnection(polydata->GetProducerPort()); glyphFilter->Update(); vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(glyphFilter->GetOutputPort()); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); actor->GetProperty()->SetPointSize(3); actor->GetProperty()->SetColor(1, 0, 0); vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor->SetRenderWindow(renderWindow); renderer->AddActor(actor); renderer->SetBackground(.3, .6, .3); // Background color green renderWindow->Render(); renderWindowInteractor->Start(); return 0;}
程序运行结果:
程序代码:http://pan.baidu.com/s/1chutp8
0 0
- vtk实战(十一)—自定义分隔符读取文本
- vtk实战(六)—读取".gml"文件
- vtk实战(八)—读取.raw文件
- c++逗号分隔符文本读取
- vtk实战(二十一)——写入STL格式
- vtk实战(十)—文本格式转vtp格式
- vtk实战(十二)——读取.obj文件
- vtk实战(十三)——读取DICOM影像文件
- vtk实战(十九)——读取 PDB数据
- vtk实战(三十五)——读取结构化格网数据
- vtk实战(三十六)——读取结构化点云数据
- vtk实战(三十七)——读取bmp数据
- vtk实战(三十八)——读取jpg数据(有问题)
- vtk实战(三十九)——读取PNG数据
- vtk实战(四十一)——读取tif数据
- vtk实战(七)—读取三维点坐标
- vtk实战(九)—读取三维点坐标2
- 关于循环读取文本中分隔符的问题
- HDU--2034
- Pat 1052 Linked List Sorting (25)
- UNPv2第一章:简介
- 2016.4.27
- C#
- vtk实战(十一)—自定义分隔符读取文本
- java 中文乱码处理
- 前言
- PX4 Offboard Control Using MAVROS on ROS
- Java自动装箱和自动拆箱
- UNPv2第二章:Posix IPC
- android源码分析之View的事件分发(上)
- Mysql+hibernate 长时间不操作再进入,导致连接池关闭的问题解决。
- UIPanGestureRecognizer上下左右滑动方向判断算法