Добавьте скаляры в файл vtk (vtk 3.0 legacy) в Python

Я пытаюсь добавить вычисленный скаляр в существующий файл VTK.

Упрощенная версия моего кода следующая

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

На данный момент я предполагаю, что мне нужно добавить vtkArray к данным с помощью data.SetCell

Проблема в том, что SetCell запрашивает vtkCellArray, и мне пока не удалось преобразовать мой массив scalar3 в vtkCellArray.

Это правильный подход? Любое предложение?

1 ответ

Вам действительно нужно использовать cell_data.AddArray() для добавления вашего массива. SetCell() фактически изменит топологию вашего набора данных.

Rojj прав в использовании vtk.numpy_support для преобразования туда и обратно между массивами vtkArrays и numpy. Вы можете использовать что-то вроде следующего:

import vtk
from vtk.util import numpy_support
...
scalar3_array = numpy_support.numpy_to_vtk(scalar3)
scalar3_array.SetName('scalar3')
cell_data.AddArray(scalar3)
Другие вопросы по тегам