vtk实战(十四)——解析vtk XML 文件的内容
2016-04-27 11:25
507 查看
对于vtk XML格式的文件: .vtu, .vtp, .vts, .vtr, .vti, .vto, 解析其存储单元、单元数据。
代码链接:http://pan.baidu.com/s/1i4OPjjZ
#include <vtkSmartPointer.h> #include <vtkXMLReader.h> #include <vtkXMLUnstructuredGridReader.h> #include <vtkXMLPolyDataReader.h> #include <vtkXMLStructuredGridReader.h> #include <vtkXMLRectilinearGridReader.h> #include <vtkXMLHyperOctreeReader.h> #include <vtkXMLCompositeDataReader.h> #include <vtkXMLStructuredGridReader.h> #include <vtkXMLImageDataReader.h> #include <vtkDataSetReader.h> #include <vtkDataSet.h> #include <vtkUnstructuredGrid.h> #include <vtkRectilinearGrid.h> #include <vtkHyperOctree.h> #include <vtkImageData.h> #include <vtkPolyData.h> #include <vtkStructuredGrid.h> #include <vtkPointData.h> #include <vtkCellData.h> #include <vtkFieldData.h> #include <vtkCellTypes.h> #include <vtksys\SystemTools.hxx> template<class TReader> vtkDataSet *ReadAnXMLFile(const char*fileName); int main() { char *argv[5]; argv[0] = "cow.vtp"; argv[1] = "cth.vtr"; argv[2] = "chombo3d_1.vti"; argv[3] = "multicomb_1.vts"; argv[4] = "quadraticTetra01.vtu"; int f = 0; while (f < 5) { vtkDataSet *dataSet; std::string extension = vtksys::SystemTools::GetFilenameLastExtension(argv[f]); if (extension == ".vtu") { dataSet = ReadAnXMLFile<vtkXMLUnstructuredGridReader>(argv[f]); } else if (extension == ".vtp") { dataSet = ReadAnXMLFile<vtkXMLPolyDataReader>(argv[f]); } else if (extension == ".vts") { dataSet = ReadAnXMLFile<vtkXMLStructuredGridReader>(argv[f]); } else if (extension == ".vtr") { dataSet = ReadAnXMLFile<vtkXMLRectilinearGridReader>(argv[f]); } else if (extension == ".vti") { dataSet = ReadAnXMLFile<vtkXMLImageDataReader>(argv[f]); } else if (extension == ".vto") { dataSet = ReadAnXMLFile<vtkXMLHyperOctreeReader>(argv[f]); } else if (extension == ".vtk") { dataSet = ReadAnXMLFile<vtkDataSetReader>(argv[f]); } else { std::cerr << argv[0] << " Unknown extension: " << extension << std::endl; return EXIT_FAILURE; } int numberOfCells = dataSet->GetNumberOfCells(); int numberOfPoints = dataSet->GetNumberOfPoints(); std::cout << "------------------------" << std::endl; std::cout << argv[f] << std::endl << " contains a " << std::endl << dataSet->GetClassName() << " that has " << numberOfCells << " cells" << " and " << numberOfPoints << " points." << std::endl; typedef std::map<int, int> CellContainer; CellContainer cellMap; for (int i = 0; i < numberOfCells; i++) { cellMap[dataSet->GetCellType(i)]++; } CellContainer::const_iterator it = cellMap.begin(); while (it != cellMap.end()) { std::cout << "\tCell type " << vtkCellTypes::GetClassNameFromTypeId(it->first) << " occurs " << it->second << " times." << std::endl; ++it; } vtkPointData *pd = dataSet->GetPointData(); if (pd) { std::cout << " contains point data with " << pd->GetNumberOfArrays() << " arrays." << std::endl; for (int i = 0; i < pd->GetNumberOfArrays(); i++) { std::cout << "\tArray " << i << " is named " << (pd->GetArrayName(i) ? pd->GetArrayName(i) : "NULL") << std::endl; } } vtkCellData *cd = dataSet->GetCellData(); if (cd) { std::cout << " contains cell data with " << cd->GetNumberOfArrays() << " arrays." << std::endl; for (int i = 0; i < cd->GetNumberOfArrays(); i++) { std::cout << "\tArray " << i << " is named " << (cd->GetArrayName(i) ? cd->GetArrayName(i) : "NULL") << std::endl; } } // Now check for field data if (dataSet->GetFieldData()) { std::cout << " contains field data with " << dataSet->GetFieldData()->GetNumberOfArrays() << " arrays." << std::endl; for (int i = 0; i < dataSet->GetFieldData()->GetNumberOfArrays(); i++) { std::cout << "\tArray " << i << " is named " << dataSet->GetFieldData()->GetArray(i)->GetName() << std::endl; } } dataSet->Delete(); f++; } return 0; } template<class TReader> vtkDataSet *ReadAnXMLFile(const char*fileName) { vtkSmartPointer<TReader> reader = vtkSmartPointer<TReader>::New(); reader->SetFileName(fileName); reader->Update(); reader->GetOutput()->Register(reader); return vtkDataSet::SafeDownCast(reader->GetOutput()); }
代码链接:http://pan.baidu.com/s/1i4OPjjZ
相关文章推荐
- Android定位
- 数据结构--优先级队列
- Java协变数组和类型擦除
- 过滤器与拦截器区别
- 指针数组和数组指针的区别
- com.MySQL.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Every derived table must have its own ali
- openstack第1天
- 0427 容联emjo 表情转焕
- RxJava----操作符:条件和布尔操作符
- netty实例之路1
- Spring整合Proxool到Ibatis中
- C#
- UIButton 扩大按钮的响应区域
- MATLAB中imfilter函数用Opencv 实现遇到的若干问题
- ButterKnife源码分析
- 解决SSH自动断线,无响应的问题
- pageContext对象
- HTTP协议 (3)了解响应报文
- DirectX开发中找不到dxtrans.h的问题的解决
- C和指针之学习笔记(5)