读取一个 vtr 文件转换它并再次写入它不会创建文件

问题描述

我对在 paraview 之外处理 vtk(/vtr/vtu/..) 完全陌生,但我想让我的工作流程更容易一些,所以我想在 paraview 之外进行一些数据转换。 基本上我有两个模拟,但原点和轴不同。原点差异在每个时间步长都会发生变化,因此我想转换我的文件,使它们在 paraview 中打开之前对齐,这样当我想查看不同的时间步长时,我不必经常更改转换过滤器中的值。我首先尝试通过旋转和转换一个文件来实现这一目标。

我的方法是这样的(基于很多其他网页,所以很遗憾我无法再追踪到哪里来的):

import vtk 
reader = vtk.vtkXMLRectilinearGridReader()
reader.SetFileName(file_name)
reader.Update()

data = reader.Getoutput()

transform = vtk.vtkTransform()
transform.RotateZ(90)
transform.Translate(2.34375,4.6875,2.34375)

transformFilter=vtk.vtkTransformFilter()
transformFilter.SetTransform(transform)
transformFilter.SetInputData(data)
transformFilter.Update()

writer = vtk.vtkXMLRectilinearGridWriter()
writer.SetInputData(transformFilter.Getoutput())
writer.SetFileName("Output.vtr")
writer.Update()

现在我没有收到任何错误,但也没有创建文件,我不知道我哪里出错了。任何帮助都受到高度赞赏。 (顺便说一句,我尝试了 this 答案,实际上确实创建了一个文件

编辑;也许我找到了它出错的原因,但我仍然不知道如何解决它。如果我打印 data,它会显示 vtkRectilinearGrid,而如果我打印 transformFilter.Getoutput(),它会显示 vtkStructuredGrid。我认为变换过滤器会保持相同的网格类型,但显然不会。有人知道让它保持相同的网格类型吗?

解决方法

A vtkRectilinearGrid 沿主轴定向。它允许进行一些优化,例如具有隐式坐标。

Transform 过滤器的输出无法转换为 vtkRectlinearGrid,主要是因为您无法假定其方向。点不能像 RectilinearGrid 那样是隐式的,对象存储每个点。

正如您所说,您的解决方案是改变您编写数据的方式。您可以使用 .vts 编写 vtkXMLStructuredGridWriter 文件。