Чтение прямолинейной сетки из файла VTR с помощью Python с использованием vtkXMLRectilinearGridReader () - PullRequest
0 голосов
/ 02 октября 2019

Я новый пользователь файлов VTR и унаследовал некоторый устаревший код, который намеревается прочитать в наборе данных Rectilinear Grid, хранящемся в файле VTR с Python, используя vtkXMLRectilinearGridReader(). Я испытываю затруднения, заставляя это работать, и я надеюсь, что у кого-то может быть предложение для меня. Моя общая цель - получить доступ к базовым данным, хранящимся в файле VTR (т.е. посмотреть количество имеющихся данных, а также конкретные значения данных).

До сих пор я пытался запустить код, показанный ниже,Это не полный код, а только первая часть, которая, по моему мнению, вызывает проблему.

#=======================================================================
from sys import argv
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection=‘3d’)
import sys
sys.path.append(’/usr/lib/python2.7/dist-packages’)
import vtk
#===========================================================
#set input variables
#===========================================================

infile= ‘filename.vtr’ # this is a generic filename

outfile=infile.split(’/’)[-1]
outfile=outfile.split(’.’)[0]+‘mor.’+outfile.split(’.’)[1]

kerthreshold=250.
strucsize=10
connectval=50.
constructsize=10

#===========================================================
#loading data
#===========================================================
reader=vtk.vtkXMLRectilinearGridReader()
reader.SetFileName(infile)
reader.Update()

#===========================================================
#get information from vtk file
#===========================================================
datainfo=reader.GetOutput()
pointdata=datainfo.GetPointData()
extents=[]
extents=datainfo.GetExtent()
num=datainfo.GetNumberOfPoints()

oricube=[]

print (“Read datacube…”)
for pid in range(0,num):
    value=pointdata.GetScalars().GetValue(pid)
    oricube.append(value)
#=======================================================================`

Код работает нормально, пока не дойдет до цикла for в конце. В этот момент я получаю сообщение об ошибке:

AttributeError: ‘NoneType’ object has no attribute ‘GetValue’. 

Очевидно, reader.GetOutput().GetPointData().GetScalars() не распознается как фактический объект, и поэтому метод GetValue() не распознается как метод.

Возможно, есть лучший способ считывать и получать доступ к данным файла VTR, с которыми код, с которым я сейчас работаю, сейчас ограничен, но я ограничен работой с кодом, который у меня есть. Если у кого-нибудь есть какие-либо предложения для меня, пожалуйста, дайте мне знать!

...