如何使用anaconda Python将速度场写入VTI图像?

时间:2015-02-01 12:33:53

标签: python vtk anaconda

我正在尝试用python编写VTK图像数据文件(.vti)。对于我的python编码,我使用的是Anaconda发行版。我正在使用evtk包,它能够写一个vtk文件。

我需要写的数据是我有3d X,Y,Z和U,V,W 3d数组的速度。我找到了一些使用evtk包编写.vti文件的示例代码。(http://www.vtk.org/Wiki/VTK/Writing_VTK_files_using_python

问题是示例代码和内置函数只接受标量点或单元格数据。所以我能用scalars编写一个文件,但我需要它将数据作为向量。

我正在挖掘实际的包文件,并试图找到一个解决方案或工具来编写代码。如果有人有建议或解决方案可以帮助我,我将非常感激。

我附上了我在wiki上写的测试代码,以防万一我错过了输入函数的方法,但我担心我需要从头开始。

提前致谢

(删除了代码,因为下面的代码更新)

管理编写非结构化文件(.vtu),但我真的希望能够编写一个图像数据文件。(在此过程中发现以下链接很有用。http://www.aero.iitb.ac.in/~prabhu/tmp/python_cep07/course_handouts/viz3d_handout.pdf

提前再次感谢

我附上代码,看看是否有人有任何建议。

from tvtk.api import tvtk, write_data

导入numpy为N

##Generation of data
#array of x,y,z coordinates
[Z,Y,X] = N.mgrid[-2.:2+1, -2.:2+1, -2.:2+1]
#array of zeros to add the u,v,w components 
[W,V,U] = N.zeros_like([Z,Y,X],dtype=float) 
#loop through data to have correct format
points = N.array([N.zeros(3) for i in range(len(Z)*len(Z[0])*len(Z[0][0]))])
velF = N.zeros_like(points)
c=0
for k in range(len(Z)):
    for j in range(len(Z[0])):
        for i in range(len(Z[0][0])):
            #coordinates of point
            x = X[k][j][i]
            y = Y[k][j][i]
            z = Z[k][j][i]
            points[c] = N.array([x,y,z])
            #test velocity field               
            u = k -2.
            v = 0.
            w = 0.
            velF[c] = N.array([u,v,w])
            #update counter            
            c = c+1
##Generate and write the vtk file    
Ugrid = tvtk.UnstructuredGrid()
Ugrid.points = points
Ugrid.point_data.vectors = velF
Ugrid.point_data.vectors.name = 'velocity'
write_data(Ugrid, 'vtktest.vtu')

1 个答案:

答案 0 :(得分:0)

如果您想使用 evtk 编写非结构化网格,可在此处找到包含点和单元格数据(向量和标量字段)的完整演示:https://gist.github.com/dromanov/0fb8bacff5342a56a690

技术说明和解释如下:http://spikard.blogspot.ru/2015/07/visualization-of-unstructured-grid-data.html

祝你好运!