Skip to content

Instantly share code, notes, and snippets.

@somada141
Last active January 31, 2022 20:36
Show Gist options
  • Save somada141/2879832955b6dddfdf9c to your computer and use it in GitHub Desktop.
Save somada141/2879832955b6dddfdf9c to your computer and use it in GitHub Desktop.
Display VTK renders into IPython Notebook #python #visualization #vtk #ipython #ipythonnotebook

This function takes a renderer and displays the output directly into IPython

def vtk_show(renderer, w=100, h=100):
    """
    Takes vtkRenderer instance and returns an IPython Image with the rendering.
    """
    renderWindow = vtkRenderWindow()
    renderWindow.SetOffScreenRendering(1)
    renderWindow.AddRenderer(renderer)
    renderWindow.SetSize(w, h)
    renderWindow.Render()
     
    windowToImageFilter = vtkWindowToImageFilter()
    windowToImageFilter.SetInput(renderWindow)
    windowToImageFilter.Update()
     
    writer = vtkPNGWriter()
    writer.SetWriteToMemory(1)
    writer.SetInputConnection(windowToImageFilter.GetOutputPort())
    writer.Write()
    data = str(buffer(writer.GetResult()))
    
    from IPython.display import Image
    return Image(data)

source: http://nbviewer.ipython.org/gist/certik/5723420

@FIXDiz
Copy link

FIXDiz commented May 3, 2018

Hey, how can you replace the (buffer built-in function) to work in python3.0+ ? Thanks in advance

@hansomat
Copy link

Hi,
buffer is replaced by memoryview. It works by changing str(buffer(writer.GetResult())) into _memoryview(writer.GetResult()).tobytes()

import vtk
from IPython.display import Image

def vtk_show(renderer, w=100, h=100):
    """
    Takes vtkRenderer instance and returns an IPython Image with the rendering.
    """
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.SetOffScreenRendering(1)
    renderWindow.AddRenderer(renderer)
    renderWindow.SetSize(w, h)
    renderWindow.Render()
     
    windowToImageFilter = vtk.vtkWindowToImageFilter()
    windowToImageFilter.SetInput(renderWindow)
    windowToImageFilter.Update()
     
    writer = vtk.vtkPNGWriter()
    writer.SetWriteToMemory(1)
    writer.SetInputConnection(windowToImageFilter.GetOutputPort())
    writer.Write()
    data = memoryview(writer.GetResult()).tobytes()
    
    return Image(data)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment