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

标签 vtk paraview

我想将旧版 .vtk 文件转换为二进制文件,最好是 .vtu 文件,因为我使用的是非结构化网格。 为此,我改编了来自 http://www.vtk.org/Wiki/VTK/Examples/Cxx/IO/ConvertFile 的 ConvertFile-Example。

#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;
}

但是当我用它来转换我的遗留文件时,我在第一组之后丢失了所有单元格数据。在我遗留文件的这个最小示例中,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
LOOKUP_TABLE default
1 3 2 1

我对 vtk 还是个新手。我应该使用其他阅读器或编写器吗?还是完全错误?

最佳答案

这里的问题是,您选择的阅读器对包含 2 个元胞数据数组的输入文件都标记为标量感到困惑。因此,阅读器只输出一个单元格数据数组。我的建议是使用 ParaView,特别是 pvpython 可执行文件来转换文件。相应的 Python 代码如下所示:

from paraview.simple import *
r = LegacyVTKReader( FileNames=['input.vtk'] )
w = XMLUnstructuredGridWriter()
w.FileName = 'output.vtu'
w.UpdatePipeline()

关于vtk - 如何将 vtk 遗留文件转换为 vtu 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158599/

相关文章:

python - 如何使用 vtk (python) 可视化 3D CT 扫描?

c++ - vtkRenderer 错误

python - VTK在python中渲染2D网格

python - Paraview:从积分变量中获取点数据

python - 如何将 3D vtkDataSet 转换为 numpy 数组?

c++ - 在 mex 下编译 vtk 示例时找不到 GLIBCXX

c++ - 如何将ASCII和BINARY数据同时写入同一个文件

python - 如何从python输出一个数组以通过paraview显示

python - 如何从 Python 脚本在 Paraview 中创建交互式窗口?

visualization - 在 ParaView 中将点源重新采样为图像数据