[英]Python: Read vtk file, add data set then write vtk
我有一个现有的 vtk 文件(一个 FE 网格,正六面体网格),我想在 Python 中添加一个数据集。 具体来说,我想将此 numpy 数据集添加到每个节点,然后在 ParaView 中对其进行可视化。
关于如何开始这方面的任何提示?
VTK(以及扩展的 ParaView)具有很棒的 NumPy 集成工具。 有关这些的精彩概述,请参阅从改进的 VTK – numpy 集成开始的博客文章系列]。
重要的部分是:
勾勒出这一点,你可以写:
import vtk
from vtk.numpy_interface import dataset_adapter as dsa
dataSet = ...
numpyArray = ...
adaptedDataSet = dsa.WrapDataObject(dataSet)
dataSet.PointData.append(numpyArray, 'arrayname')
如果您的数据与单元格而不是点相关联,您可以将最后一行更改为
dataSet.CellData.append(numpyArray, 'arrayname')
您必须确保 NumPy 数组中的数据顺序与六面体网格中的点顺序匹配。
现在,您如何在 ParaView 中执行此操作? 您可以添加一个可编程过滤器。 执行可编程过滤器上设置的脚本的 Python 环境已经为您完成了此包装,因此您可以将上面的脚本简化为:
# Shallow copy the input data to the output
output.VTKObject.ShallowCopy(inputs[0].VTKObject)
# Define the numpy array
numpyArray = ...
# Add the numpy array as a point data set
output.PointData.append(numpyArray, 'arrayName')
在上面的脚本中, output
是由Programmable Filter生成的数据集的包装副本,使您不必手动进行包装。 您确实需要将输入对象浅复制到输出,如脚本所示。
谢谢你的协助。 这是我解决问题的方法:
import vtk
from vtk.numpy_interface import dataset_adapter as dsa
# Read in base vtk
fileName = "Original.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(fileName)
reader.Update()
mesh = reader.GetOutput()
# Add data set and write VTK file
meshNew = dsa.WrapDataObject(mesh)
meshNew.PointData.append(NewDataSet, "new data")
writer = vtk.vtkUnstructuredGridWriter()
writer.SetFileName("New.vtk")
writer.SetInputData(meshNew.VTKObject)
writer.Write()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.