问题描述
我对在 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
文件。