VTK widgets for trame

2.11.7 · active · verified Tue Apr 14

trame-vtk extends the trame web framework with components to interface with VTK (Visualization Toolkit) and/or ParaView. It enables the creation of rich visualization and data processing applications in Python, leveraging VTK's capabilities with options for both remote and client-side rendering via vtk.js. The library is actively developed, receiving regular updates in line with the trame ecosystem. The current version is 2.11.7.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates a basic trame-vtk application displaying a VTK cone. It sets up a simple VTK pipeline, integrates it with a `VtkRemoteView` widget within a trame `VAppLayout`, and adds a slider to control the cone's resolution. It explicitly sets `server.client_type = "vue3"` for compatibility with recent `trame` versions.

import vtk
from trame.app import get_server
from trame.ui.vuetify3 import VAppLayout
from trame.widgets import vuetify3 as v3
from trame.widgets.vtk import VtkRemoteView
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkRenderingCore import (vtkActor, vtkPolyDataMapper, vtkRenderer, vtkRenderWindow)

# -----------------------------------------------------------------------------
# VTK pipeline
# -----------------------------------------------------------------------------

cone = vtkConeSource()
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(cone.GetOutputPort())
actor = vtkActor()
actor.SetMapper(mapper)

renderer = vtkRenderer()
renderer.AddActor(actor)
renderer.ResetCamera()

render_window = vtkRenderWindow()
render_window.AddRenderer(renderer)

# -----------------------------------------------------------------------------
# Trame setup
# -----------------------------------------------------------------------------

server = get_server('trame_vtk_cone')
server.client_type = "vue3" # Explicitly set for trame v3 and above
state, ctrl = server.state, server.controller

with VAppLayout(server, full_height=True) as layout:
    with v3.VContainer(fluid=True, classes='fill-height'):
        with VtkRemoteView(render_window) as view:
            ctrl.view_update = view.update
            ctrl.view_reset_camera = view.reset_camera

@state.change('resolution')
def update_resolution(resolution, **kwargs):
    cone.SetResolution(resolution)
    ctrl.view_update()

@ctrl.add('reset_camera')
def reset_camera():
    ctrl.view_reset_camera()

if __name__ == '__main__':
    server.start()

view raw JSON →