[英]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.