繁体   English   中英

Python:读取vtk文件,添加数据集然后写入vtk

[英]Python: Read vtk file, add data set then write vtk

我有一个现有的 vtk 文件(一个 FE 网格,正六面体网格),我想在 Python 中添加一个数据集。 具体来说,我想将此 numpy 数据集添加到每个节点,然后在 ParaView 中对其进行可视化。

关于如何开始这方面的任何提示?

VTK(以及扩展的 ParaView)具有很棒的 NumPy 集成工具。 有关这些的精彩概述,请参阅从改进的 VTK – 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM