我想构建一个包含点位置和相关数据(例如压力、速度矢量)的 .vtk 文件。
到目前为止,我已经像这样尝试过 vtk poly 数据编写器:
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"))