使用Python和带有多个向量字段的tvtk将数据保存到VTK

使用Python和带有多个向量字段的tvtk将数据保存到VTK,python,vtk,mayavi,Python,Vtk,Mayavi,我试图保存三组向量量,它们对应于相同的结构化网格(速度、湍流强度和速度波动的标准偏差)。理想情况下,我希望它们成为同一vtk文件的一部分,但到目前为止,我只能将其中一个放入该文件,如下所示: sg = tvtk.StructuredGrid(dimensions=x.shape, points=pts) sg.point_data.vectors = U sg.point_data.vectors.name = 'U' write_data(sg, 'vtktestWake.vtk') 在过去

我试图保存三组向量量,它们对应于相同的结构化网格(速度、湍流强度和速度波动的标准偏差)。理想情况下,我希望它们成为同一vtk文件的一部分,但到目前为止,我只能将其中一个放入该文件,如下所示:

sg = tvtk.StructuredGrid(dimensions=x.shape, points=pts)
sg.point_data.vectors = U
sg.point_data.vectors.name = 'U'
write_data(sg, 'vtktestWake.vtk')
在过去的几个小时里,我一直在寻找一个如何添加多个向量或标量场的示例,但失败了,所以我想在这里提问。任何指导都将不胜感激

谢谢


阿图尔

经过一番周密的研究,我发现了以下基于实例的解决方案。必须使用
add\u array
方法添加附加数据字段,请参见:

从tvtk.api导入tvtk,写入数据
将numpy作为np导入
数据=np.随机.随机((3,3,3))
data2=np.random.random((3,3,3))
i=tvtk.ImageData(间距=(1,1,1),原点=(0,0,0))
i、 point_data.scalars=data.ravel()
i、 point_data.scalars.name='scalars'
i、 维度=data.shape
#添加第二个点数据字段
i、 点\数据。添加\数组(data2.ravel())
i、 点数据。获取数组(1)。名称='field2'
i、 点_数据更新()
写入数据(i,‘vtktest.vtk’)

如果需要,是否可以将每个字段保存到单独的文件中,然后将它们组合在一起,甚至可以在
ParaView
或类似的文件中?我不知道是否有办法在ParaView中完成,我会看看。不过,我认为应该有一个更直接的方法……我很确定这是不可能的。您可能能够将正确的信息存储为对比的点和单元数据,但这是笨重的,无法同时可视化(afaik),并且在存储任意数量的向量的一般情况下没有帮助。还有其他更有用的文件格式,用于保存vtk场景或摄影机的当前状态。你能提供更多关于你想做什么的细节吗?谢谢你的回复。在CFD程序中,我使用的数据是通过paraview格式可视化的,可以为一个案例文件导入多个字段的数据。因此,我认为一个vtk对象可能包含多个向量和/或标量场。因此,我的想法是将我感兴趣的所有三个字段存储在同一个vtk文件中。如果你说这是不可能的,我将只做3个单独的vtk文件,每个数量一个。实际上,vtk文件格式允许每个点和单元格保存多个点或单元格数据,我经常使用这种格式!这只是一个问题,如果tvtk的作者允许这样做。嗨,很抱歉迟了答复,但我有一个非常繁忙的周末。我刚刚测试了你的解决方案,效果非常好!非常感谢你的帮助!和平