我正在尝试用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')
答案 0 :(得分:0)
如果您想使用 evtk 编写非结构化网格,可在此处找到包含点和单元格数据(向量和标量字段)的完整演示:https://gist.github.com/dromanov/0fb8bacff5342a56a690。
技术说明和解释如下:http://spikard.blogspot.ru/2015/07/visualization-of-unstructured-grid-data.html。
祝你好运!