vtk实战(十四)——解析vtk XML 文件的内容

前端之家收集整理的这篇文章主要介绍了vtk实战(十四)——解析vtk XML 文件的内容前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

对于vtk XML格式的文件: .vtu,.vtp,.vts,.vtr,.vti,.vto, 解析其存储单元、单元数据。

  1. #include <vtkSmartPointer.h>
  2. #include <vtkXMLReader.h>
  3. #include <vtkXMLUnstructuredGridReader.h>
  4. #include <vtkXMLPolyDataReader.h>
  5. #include <vtkXMLStructuredGridReader.h>
  6. #include <vtkXMLRectilinearGridReader.h>
  7. #include <vtkXMLHyperOctreeReader.h>
  8. #include <vtkXMLCompositeDataReader.h>
  9. #include <vtkXMLStructuredGridReader.h>
  10. #include <vtkXMLImageDataReader.h>
  11. #include <vtkDataSetReader.h>
  12. #include <vtkDataSet.h>
  13. #include <vtkUnstructuredGrid.h>
  14. #include <vtkRectilinearGrid.h>
  15. #include <vtkHyperOctree.h>
  16. #include <vtkImageData.h>
  17. #include <vtkPolyData.h>
  18. #include <vtkStructuredGrid.h>
  19. #include <vtkPointData.h>
  20. #include <vtkCellData.h>
  21. #include <vtkFieldData.h>
  22. #include <vtkCellTypes.h>
  23. #include <vtksys\SystemTools.hxx>
  24.  
  25. template<class TReader> vtkDataSet *ReadAnXMLFile(const char*fileName);
  26.  
  27. int main()
  28. {
  29. char *argv[5];
  30. argv[0] = "cow.vtp";
  31. argv[1] = "cth.vtr";
  32. argv[2] = "chombo3d_1.vti";
  33. argv[3] = "multicomb_1.vts";
  34. argv[4] = "quadraticTetra01.vtu";
  35. int f = 0;
  36. while (f < 5)
  37. {
  38. vtkDataSet *dataSet;
  39. std::string extension =
  40.  
  41. vtksys::SystemTools::GetFilenameLastExtension(argv[f]);
  42. if (extension == ".vtu")
  43. {
  44. dataSet = ReadAnXMLFile<vtkXMLUnstructuredGridReader>(argv[f]);
  45. }
  46. else if (extension == ".vtp")
  47. {
  48. dataSet = ReadAnXMLFile<vtkXMLPolyDataReader>(argv[f]);
  49. }
  50. else if (extension == ".vts")
  51. {
  52. dataSet = ReadAnXMLFile<vtkXMLStructuredGridReader>(argv[f]);
  53. }
  54. else if (extension == ".vtr")
  55. {
  56. dataSet = ReadAnXMLFile<vtkXMLRectilinearGridReader>(argv[f]);
  57. }
  58. else if (extension == ".vti")
  59. {
  60. dataSet = ReadAnXMLFile<vtkXMLImageDataReader>(argv[f]);
  61. }
  62. else if (extension == ".vto")
  63. {
  64. dataSet = ReadAnXMLFile<vtkXMLHyperOctreeReader>(argv[f]);
  65. }
  66. else if (extension == ".vtk")
  67. {
  68. dataSet = ReadAnXMLFile<vtkDataSetReader>(argv[f]);
  69. }
  70. else
  71. {
  72. std::cerr << argv[0] << " Unknown extension: " << extension << std::endl;
  73. return EXIT_FAILURE;
  74. }
  75.  
  76. int numberOfCells = dataSet->GetNumberOfCells();
  77. int numberOfPoints = dataSet->GetNumberOfPoints();
  78.  
  79. std::cout << "------------------------" << std::endl;
  80. std::cout << argv[f] << std::endl
  81. << " contains a " << std::endl
  82. << dataSet->GetClassName()
  83. << " that has " << numberOfCells << " cells"
  84. << " and " << numberOfPoints << " points." << std::endl;
  85. typedef std::map<int,int> CellContainer;
  86. CellContainer cellMap;
  87. for (int i = 0; i < numberOfCells; i++)
  88. {
  89. cellMap[dataSet->GetCellType(i)]++;
  90. }
  91.  
  92. CellContainer::const_iterator it = cellMap.begin();
  93. while (it != cellMap.end())
  94. {
  95. std::cout << "\tCell type "
  96. << vtkCellTypes::GetClassNameFromTypeId(it->first)
  97. << " occurs " << it->second << " times." << std::endl;
  98. ++it;
  99. }
  100.  
  101. vtkPointData *pd = dataSet->GetPointData();
  102. if (pd)
  103. {
  104. std::cout << " contains point data with "
  105. << pd->GetNumberOfArrays()
  106. << " arrays." << std::endl;
  107. for (int i = 0; i < pd->GetNumberOfArrays(); i++)
  108. {
  109. std::cout << "\tArray " << i
  110. << " is named "
  111. << (pd->GetArrayName(i) ? pd->GetArrayName(i) : "NULL")
  112. << std::endl;
  113. }
  114. }
  115. vtkCellData *cd = dataSet->GetCellData();
  116. if (cd)
  117. {
  118. std::cout << " contains cell data with "
  119. << cd->GetNumberOfArrays()
  120. << " arrays." << std::endl;
  121. for (int i = 0; i < cd->GetNumberOfArrays(); i++)
  122. {
  123. std::cout << "\tArray " << i
  124. << " is named "
  125. << (cd->GetArrayName(i) ? cd->GetArrayName(i) : "NULL")
  126. << std::endl;
  127. }
  128. }
  129. // Now check for field data
  130. if (dataSet->GetFieldData())
  131. {
  132. std::cout << " contains field data with "
  133. << dataSet->GetFieldData()->GetNumberOfArrays()
  134. << " arrays." << std::endl;
  135. for (int i = 0; i < dataSet->GetFieldData()->GetNumberOfArrays(); i++)
  136. {
  137. std::cout << "\tArray " << i
  138. << " is named " << dataSet->GetFieldData()->GetArray(i)->GetName()
  139. << std::endl;
  140. }
  141. }
  142. dataSet->Delete();
  143. f++;
  144. }
  145. return 0;
  146. }
  147.  
  148. template<class TReader> vtkDataSet *ReadAnXMLFile(const char*fileName)
  149. {
  150. vtkSmartPointer<TReader> reader =
  151. vtkSmartPointer<TReader>::New();
  152. reader->SetFileName(fileName);
  153. reader->Update();
  154. reader->GetOutput()->Register(reader);
  155. return vtkDataSet::SafeDownCast(reader->GetOutput());
  156. }


代码链接http://pan.baidu.com/s/1i4OPjjZ

猜你在找的XML相关文章