簡體   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