*[[Google Colaboratory上での可視化]] [#a59dbce3]

Google Colaboratory上でVTKの可視化を行うためには、ダミーのXセッションを起動する必要がありますが、Gooble Colaboratoryではバックグラウンドプロセルの起動はできないため、pyvirtualdisplayを起動して、DISPLAY環境変数を指定します。

  !apt-get -qq -y install xvfb freeglut3-dev ffmpeg> /dev/null
  !pip install vtk pyvirtualdisplay

pyvirtualdisplayを起動して、DISPLAY環境変数するためには、次のコードを実行します。

#code(python){{

# Start virtual display
from pyvirtualdisplay import Display
display = Display(visible=0, size=(1024, 480))
display.start()
import os
os.environ["DISPLAY"] = ":" + str(display.display) + "." + str(display.screen)

}}

VTKのコードでは、vtkRenderWindowのwindowをvtkPNGWriterでメモリ上に出力し、それをIPython.displayに渡します。

以下は、その一例です。


#code(python){{
import vtk

fileName = '/content/couette_flow_2d/couette_flow_2d-040.vtu'

reader = vtk.vtkXMLUnstructuredGridReader()
reader.SetFileName(fileName)
reader.Update()
ug = reader.GetOutput()
ug.GetPointData().SetActiveScalars('Density')

mapper = vtk.vtkDataSetMapper()
mapper.SetInputConnection(reader.GetOutputPort())
mapper.SetScalarRange(ug.GetPointData().GetScalars().GetRange())

actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().EdgeVisibilityOn()

scalarBar = vtk.vtkScalarBarActor()
scalarBar.SetLookupTable(mapper.GetLookupTable())
scalarBar.SetTitle("Density")

renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)

renderer.AddActor(actor)
renderer.AddActor2D(scalarBar)
renderer.ResetCamera()

renderer.GradientBackgroundOn()
renderer.SetBackground(1, 1, 1)
renderer.SetBackground2(0, 0, 0)

renderWindow.SetSize(680, 480)
renderWindow.OffScreenRenderingOn()

w2if = vtk.vtkWindowToImageFilter()
w2if.SetInput(renderWindow)
w2if.Update()

writer = vtk.vtkPNGWriter()
writer.WriteToMemoryOn()
writer.SetInputConnection(w2if.GetOutputPort())
writer.Write()
data = bytes(memoryview(writer.GetResult()))

from IPython.display import Image
Image(data)
}}



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS