我想构建一个.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"))