How to construct a .vtk file with point data from numpy arrays?

问题描述 投票:0回答:1

我想构建一个包含点位置和相关数据(例如压力、速度矢量)的 .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”时看到该点。 此外,我无法向这些点添加任何数据,也找不到合适的示例。

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

我该如何进行?

python numpy vtk
1个回答
0
投票

最快的方法是使用

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"))
© www.soinside.com 2019 - 2024. All rights reserved.