明示的な型指定を伴う点群データ生成

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'))
タグ: , , ,

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*