简体   繁体   English

在Python中将标量添加到vtk文件(vtk 3.0旧版)

[英]Add scalars to vtk file (vtk 3.0 legacy) in Python

I am trying to add a calculated scalar to an existing VTK file. 我正在尝试将计算的标量添加到现有的VTK文件中。

A simplified version of my code is the following 我的代码的简化版本如下

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()

At this point I assume that I need to add a vtkArray to data by using data.SetCell 在这一点上,我假设我需要通过使用data.SetCell向数据添加vtkArray。

The problem is that SetCell asks for a vtkCellArray and I have not managed yet to convert my array scalar3 to a vtkCellArray. 问题是SetCell要求使用vtkCellArray,而我尚未设法将数组scalar3转换为vtkCellArray。

Is this the right approach? 这是正确的方法吗? Any suggestion? 有什么建议吗?

You actually need to use cell_data.AddArray() to add your array. 实际上,您实际上需要使用cell_data.AddArray()添加数组。 SetCell() would actually modify the topology of your data set. SetCell()实际上会修改数据集的拓扑。

Rojj is correct about using vtk.numpy_support to convert back and forth between vtkArrays and numpy arrays. 对于使用vtk.numpy_support在vtkArrays和numpy数组之间来回转换,Rojj是正确的。 You can use something like the following: 您可以使用如下所示的内容:

import vtk
from vtk.util import numpy_support
...
scalar3_array = numpy_support.numpy_to_vtk(scalar3)
scalar3_array.SetName('scalar3')
cell_data.AddArray(scalar3)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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