读取 vtr 文件对其进行转换并再次写入不会创建任何文件

Read a vtr file transform it and write it again creates no file

我对在 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()

现在我没有收到任何错误,但也没有创建文件,我不知道哪里出错了。非常感谢任何帮助。 (顺便说一句,我尝试了 答案,实际上确实创建了一个文件)

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

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

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

如您所说,您的解决方案是更改写入数据的方式。你可以用 vtkXMLStructuredGridWriter.

写一个 .vts 文件