相关文章推荐
大力的油条  ·  Spring Cloud ...·  6 月前    · 
迷茫的马克杯  ·  OCI runtime exec ...·  1 年前    · 

如何将vtk遗留文件转换为vtu格式

内容来源于 Stack Overflow,遵循 CC BY-SA 4.0 许可协议进行翻译与使用。IT领域专用引擎提供翻译支持

腾讯云小微IT领域专用引擎提供翻译支持

原文
Stack Overflow用户 修改于2022-06-24
  • 该问题已被编辑
  • 提问者: Stack Overflow用户
  • 提问时间: 2014-10-02 10:06

我希望将遗留的 .vtk 文件转换为二进制文件,最好是 .vtu 文件,因为我使用的是非结构化网格。为此,我修改了来自 http://www.vtk.org/Wiki/VTK/Examples/Cxx/IO/ConvertFile 的转换文件示例

#include <string>
#include <vtkSmartPointer.h>
#include <vtkGenericDataObjectReader.h>
#include <vtkVersion.h>
#include <vtkXMLUnstructuredGridWriter.h>
#include <vtkUnstructuredGrid.h>
int main(int argc, char *argv[])
  if(argc < 3)
    std::cerr << "Required arguments: input.vtk output.vtu" << std::endl;
    return EXIT_FAILURE;
  std::string inputFileName = argv[1];
  std::string outputFileName = argv[2];
  vtkSmartPointer<vtkGenericDataObjectReader> reader = vtkSmartPointer<vtkGenericDataObjectReader>::New();
  reader->SetFileName(inputFileName.c_str());
  reader->Update();
  vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer = vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
  writer->SetFileName(outputFileName.c_str());
  writer->SetInputConnection(reader->GetOutputPort());
  writer->Update();
  return EXIT_SUCCESS;
}

但是,当我使用它来转换我的遗留文件时,我会在第一组之后丢失所有的Cell数据。在我的遗留文件的最小示例中,Scal_1在 .vtu 文件中,但Scal_2不在。

# vtk DataFile Version 3.1
Lattice Boltzmann data
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 9 INT 
0 0 0 1 0 0 2 0 0 
0 1 0 1 1 0 2 1 0 
0 2 0 1 2 0 2 2 0 
CELLS 4 20
4 0 1 3 4 
4 1 2 4 5 
4 3 4 6 7 
4 4 5 7 8 
CELL_TYPES 4
8 8 8 8 
CELL_DATA 4
SCALARS Scal_1 DOUBLE
LOOKUP_TABLE default
1 2 1 0 
SCALARS Scal_2 DOUBLE