ParaView標準のTable To Pointsフィルタは、すべてのデータをDouble型として読み込む。データ量が多い場合、Programmable Filterを介して明示的に型指定を行うことで、メモリの使用量やファイル保存時のディスク容量を節約することができる。
dataset_adapterモジュールの場所はVTKのバージョンによって異なるため、条件分岐を行っている。
動作確認バージョン
ParaView 4.2.0
ParaView 4.3.1
ParaView 4.4.0
Output Data Set Type
vtkPolyData
Script
from paraview.vtk import vtkVersion
if int(vtkVersion.GetVTKMajorVersion()) >= 7 or (int(vtkVersion.GetVTKMajorVersion()) == 6 and int(vtkVersion.GetVTKMinorVersion()) >= 2):
from paraview.vtk.numpy_interface.dataset_adapter import numpyTovtkDataArray as da
from paraview.vtk.numpy_interface.dataset_adapter import vtkDataArrayToVTKArray as va
else:
from paraview.vtk.dataset_adapter import numpyTovtkDataArray as da
from paraview.vtk.dataset_adapter import vtkDataArrayToVTKArray as va
pdi = self.GetInput()
pdo = self.GetOutput()
pdo.Allocate()
numPts = pdi.GetNumberOfRows()
I = va(pdi.GetRowData().GetArray('I'))
J = va(pdi.GetRowData().GetArray('J'))
K = va(pdi.GetRowData().GetArray('K'))
pts = vtk.vtkPoints()
pts.SetData(da(vstack((I, J, K)).T, 'Points'))
pdo.SetPoints(pts)
for i in range(shape(I)[0]):
ptIds = vtk.vtkIdList()
ptIds.InsertNextId(i)
pdo.InsertNextCell(vtk.VTK_VERTEX, ptIds)
Timestamp = va(pdi.GetRowData().GetArray('Timestamp')).astype('float64')
Attribute = va(pdi.GetRowData().GetArray('Attribute')).astype('uint8')
Distance = va(pdi.GetRowData().GetArray('Distance')).astype('float32')
pdo.GetPointData().AddArray(da(Timestamp, 'Timestamp'))
pdo.GetPointData().AddArray(da(Attribute, 'Attribute'))
pdo.GetPointData().AddArray(da(Distance, 'Distance'))
コメントを残す