如何从numpy数组中构建一个点数据的.vtk文件?



我想构建一个.vtk文件,其中包含点位置和相关数据(例如压力,速度矢量)。

到目前为止,我已经尝试了vtk多数据写入器如下:

polydata = vtk.vtkPolyData()
vtk_points = vtk.vtkPoints()
for i in range(0, positions.shape[0]):
vtk_points.InsertNextPoint(positions[i, 0], positions[i, 1], positions[i,2])
polydata.SetPoints(vtk_points)

writer = vtk.vtkPolyDataWriter()
writer.SetFileName(filename)
writer.SetInputData(polydata)
writer.Update()

这工作。然而,在Paraview中,当我选择"point Gaussian"时,我只能看到这个点。此外,我不能在这些点上添加任何数据,也找不到合适的例子。

如前所述,我想添加的数据是标量(压力)和矢量(各个方向的速度)。

我该如何继续?

最快的方法是使用vtk.numpy_interface

的数据集适配器
import vtk
from vtk.numpy_interface import algorithms as algs
from vtk.numpy_interface import dataset_adapter as dsa
import numpy as np

xs, ys, zs = np.meshgrid(np.arange(10), np.arange(10), np.arange(10))
vectors = np.random.random((10, 10, 10, 3)).astype(np.float32)
polydata = vtk.vtkPolyData()
pts = vtk.vtkPoints()
points = algs.make_vector(xs.ravel(),
ys.ravel(),
zs.ravel())
pts.SetData(dsa.numpyTovtkDataArray(points, "Points"))
polydata.SetPoints(pts)
vectors = algs.make_vector(vectors[:,:,:,0].ravel(),
vectors[:,:,:,1].ravel(),
vectors[:,:,:,2].ravel())
polydata.GetPointData().SetScalars(dsa.numpyTovtkDataArray(vectors, "Velocity"))

相关内容