PLY形式の点群データの表示

PLY形式で用意された点群データをParaView標準のPLY Readerで読み込んだ際、Cell Dataが生成されないため、Render View上で点群表示が得られない。
Programmable Filterで明示的にCell Dataを追加することで、Render View上で所望の点群表示を得ることができる。

PLYデータには8bitのRGBカラー値が付与されている前提で処理を行っているが、Intensityなど他の値が付与されている場合も同様に色付け表示可能である。
RGBカラーで表示したい場合(Magnitudeベースでカラーマップを適用するのではなく、各点に付与された8bit RGB値により色表示を行いたい場合)は、Programmable Filter適用後、Object Inspector上のPropertiesタブにて‘Map Scalars’のチェックを外すこと。

動作確認バージョン

ParaView 5.9.0-RC3

Output Data Set Type

vtkPolyData (Same as Input)

Script

pdi = self.GetInput()
pdo = self.GetOutput()

c = vtk.vtkUnsignedCharArray()
c.SetName('RGB')
c.SetNumberOfComponents(3)
c.SetNumberOfTuples(pdi.GetNumberOfPoints())

rgb = pdi.GetPointData().GetArray('RGB')
pdo.Allocate(pdi.GetNumberOfPoints(), 1)
id = vtk.vtkDoubleArray()
id.SetName('id')
id.SetNumberOfComponents(1)
id.SetNumberOfTuples(pdi.GetNumberOfPoints())
for i in range(pdi.GetNumberOfPoints()):
    vrt = vtk.vtkVertex()
    vrt.GetPointIds().SetNumberOfIds(1)
    vrt.GetPointIds().SetId(0, i)
    pdo.InsertNextCell(vrt.GetCellType(), vrt.GetPointIds())
    c.SetTuple3(i, rgb.GetValue(i * 3), rgb.GetValue(i * 3 + 1), rgb.GetValue(i * 3 + 2))

pdo.GetPointData().AddArray(c)
タグ: , , , ,

コメントを残す

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

*