我正在尝试将计算的标量添加到现有的VTK文件中。
我的代码的简化版本如下
import vtk
import os
import numpy as np
reader = vtk.vtkDataSetReader()
reader.SetFileName(vtk_file_name)
reader.ReadAllScalarsOn()
reader.Update()
data = reader.GetOutput() #This contains all data from the VTK
cell_data = data.GetCellData() #This contains just the cells data
scalar_data1 = cell_data.GetArray('scalar1')
scalar_data2 = cell_data.GetArray('scalar2')
scalar1 = np.array([scalar_data1.GetValue(i) for i in range(data.GetNumberOfCells())])
scalar2 = np.array([scalar_data2.GetValue(i) for i in range(data.GetNumberOfCells())])
scalar3 = scalar1 - scalar2
writer = vtk.vtkDataSetWriter()
此时我假设我需要使用data.SetCell
为数据添加vtkArray问题是SetCell请求vtkCellArray,我还没有设法将我的数组scalar3转换为vtkCellArray。
这是正确的做法吗?有什么建议吗?
答案 0 :(得分:2)
您实际上需要使用cell_data.AddArray()来添加数组。 SetCell()实际上会修改数据集的拓扑结构。
使用vtk.numpy_support在vtkArrays和numpy数组之间来回转换是正确的。您可以使用以下内容:
import vtk
from vtk.util import numpy_support
...
scalar3_array = numpy_support.numpy_to_vtk(scalar3)
scalar3_array.SetName('scalar3')
cell_data.AddArray(scalar3)