trame
trame copied to clipboard
vtkCompositePolyDataMapper can't work in VtkLocalView
I tried using the vtkCompositePolyDataMapper to show a pyvista.MultiBlock Object in VtkLocalView, but it reported a JavaScript error.
Can not forward events without a current renderer on the interactor
There is no problem using it in VtkRemoteView. Is this also an old issue? just wait for your new version in April?
import numpy as np
from trame.app import get_server
from trame.ui.vuetify3 import SinglePageLayout
from trame.widgets import vuetify3
import pyvista as pv
import vtk
from trame.widgets.vtk import VtkLocalView, VtkRemoteView
from vtkmodules.vtkInteractionStyle import vtkInteractorStyleSwitch # noqa
import vtkmodules.vtkRenderingOpenGL2 # noqa
pv.OFF_SCREEN = True
server = get_server()
state, ctrl = server.state, server.controller
blocks = pv.MultiBlock()
for i in range(3):
sphere = pv.Sphere(center=(i, 0, 0))
sphere["data1"] = np.full(sphere.n_points, i)
sphere["data2"] = np.full(sphere.n_points, 5 - i)
blocks.append(sphere)
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindowInteractor.GetInteractorStyle().SetCurrentStyleToTrackballCamera()
mapper = vtk.vtkCompositePolyDataMapper()
mapper.SetInputDataObject(blocks)
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer.AddActor(actor)
renderer.ResetCamera()
# -----------------------------------------------------------------------------
# GUI
# -----------------------------------------------------------------------------
with SinglePageLayout(server) as layout:
layout.title.set_text("Scalar Selection")
layout.icon.click = ctrl.view_reset_camera
with layout.content:
with vuetify3.VContainer(fluid=True, classes="pa-0 fill-height"):
# view = PyVistaLocalView(pl)
# view = PyVistaRemoteView(pl)
view = VtkLocalView(renderWindow)
ctrl.view_update = view.update
server.start()