Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions examples/demo/widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@
# ///

import vtk

from trame.app import TrameApp
from trame.ui.html import DivLayout
from trame.widgets import html, client, vtklocal, trame as tw, vuetify3 as v3
from trame.decorators import change
from trame.assets.remote import HttpFile
from trame.assets.local import to_url
from trame.assets.remote import HttpFile
from trame.decorators import change
from trame.ui.html import DivLayout

from trame.widgets import client, html, vtklocal
from trame.widgets import trame as tw
from trame.widgets import vuetify3 as v3

FULL_SCREEN = "position:absolute; left:0; top:0; width:100vw; height:100vh;"
TOP_LEFT_OVERLAY = "position: absolute; top: 1rem; left: 1rem; width: 20vw; height: calc(20vw + 4rem); z-index: 1;"
Expand Down Expand Up @@ -183,7 +185,7 @@ def _build_ui(self):
self.rw, throttle_rate=20, progress_delay=500, progress_enabled=True
) as view:
self.ctrl.view_update = view.update_throttle
self.widget_id = view.register_widget(self.widget)
self.widget_id = view.register_vtk_object(self.widget)
view.listeners = (
"listeners",
{
Expand Down
10 changes: 5 additions & 5 deletions examples/demo/widget_clip.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import vtk

from trame.app import get_server
from trame.assets.remote import HttpFile
from trame.decorators import TrameApp, change
from trame.ui.html import DivLayout
from trame.widgets import html, client # , vtklocal

from trame.widgets import client, html # , vtklocal
from trame_vtklocal.widgets import vtklocal # just for -e compatibility
from trame.decorators import TrameApp, change
from trame.assets.remote import HttpFile

FULL_SCREEN = "position:absolute; left:0; top:0; width:100vw; height:100vh;"
K_RANGE = [0.0, 15.6]
Expand Down Expand Up @@ -138,7 +138,7 @@ def _build_ui(self):
with vtklocal.LocalView(self.rw) as view:
view.update_throttle.rate = 20
self.ctrl.view_update = view.update_throttle
self.widget_id = view.register_widget(self.widget)
self.widget_id = view.register_vtk_object(self.widget)
view.listeners = (
"listeners",
{
Expand Down
14 changes: 8 additions & 6 deletions examples/docker/app.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import vtk

from trame.app import get_server
from trame.ui.html import DivLayout
from trame.widgets import html, client, vtklocal, trame as tw, vuetify3 as v3
from trame.decorators import TrameApp, change
from trame.assets.remote import HttpFile
from trame.assets.local import to_url
from trame.assets.remote import HttpFile
from trame.decorators import TrameApp, change
from trame.ui.html import DivLayout

from trame.widgets import client, html, vtklocal
from trame.widgets import trame as tw
from trame.widgets import vuetify3 as v3

FULL_SCREEN = "position:absolute; left:0; top:0; width:100vw; height:100vh;"
K_RANGE = [0.0, 15.6]
Expand Down Expand Up @@ -174,7 +176,7 @@ def _build_ui(self):
with vtklocal.LocalView(self.rw) as view:
view.update_throttle.rate = 20
self.ctrl.view_update = view.update_throttle
self.widget_id = view.register_widget(self.widget)
self.widget_id = view.register_vtk_object(self.widget)
view.listeners = (
"listeners",
{
Expand Down
7 changes: 4 additions & 3 deletions examples/pyvista/basic.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# import os
import pyvista as pv
from pyvista import examples

from trame.app import get_server
from trame.ui.html import DivLayout
from trame.widgets import html, client, vtk as vtk_widgets

from trame.widgets import client, html
from trame.widgets import vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = True # "USE_WASM" in os.environ
Expand Down Expand Up @@ -46,7 +47,7 @@ def _ui(self):
if WASM:
self.html_view = vtklocal.LocalView(self.render_window)
for w in self.widgets:
self.html_view.register_widget(w)
self.html_view.register_vtk_object(w)
else:
self.html_view = vtk_widgets.VtkRemoteView(
self.render_window, interactive_ratio=1
Expand Down
7 changes: 4 additions & 3 deletions examples/pyvista/bg_image.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# import os
import pyvista as pv
from pyvista import examples

from trame.app import get_server
from trame.ui.html import DivLayout
from trame.widgets import html, client, vtk as vtk_widgets

from trame.widgets import client, html
from trame.widgets import vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = True # "USE_WASM" in os.environ
Expand Down Expand Up @@ -42,7 +43,7 @@ def _ui(self):
if WASM:
self.html_view = vtklocal.LocalView(self.render_window)
for w in self.widgets:
self.html_view.register_widget(w)
self.html_view.register_vtk_object(w)
else:
self.html_view = vtk_widgets.VtkRemoteView(
self.render_window, interactive_ratio=1
Expand Down
7 changes: 4 additions & 3 deletions examples/pyvista/drap2dsurf.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
import numpy as np
import pyvista as pv
from pyvista import examples

from trame.app import get_server
from trame.ui.html import DivLayout
from trame.widgets import html, client, vtk as vtk_widgets

from trame.widgets import client, html
from trame.widgets import vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = True # "USE_WASM" in os.environ
Expand Down Expand Up @@ -60,7 +61,7 @@ def _ui(self):
if WASM:
self.html_view = vtklocal.LocalView(self.render_window)
for w in self.widgets:
self.html_view.register_widget(w)
self.html_view.register_vtk_object(w)
else:
self.html_view = vtk_widgets.VtkRemoteView(
self.render_window, interactive_ratio=1
Expand Down
7 changes: 4 additions & 3 deletions examples/pyvista/eye_dome_lighting.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# import os
import pyvista as pv
from pyvista import examples

from trame.app import get_server
from trame.ui.html import DivLayout
from trame.widgets import html, client, vtk as vtk_widgets

from trame.widgets import client, html
from trame.widgets import vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = True # "USE_WASM" in os.environ
Expand Down Expand Up @@ -45,7 +46,7 @@ def _ui(self):
if WASM:
self.html_view = vtklocal.LocalView(self.render_window)
for w in self.widgets:
self.html_view.register_widget(w)
self.html_view.register_vtk_object(w)
else:
self.html_view = vtk_widgets.VtkRemoteView(
self.render_window, interactive_ratio=1
Expand Down
7 changes: 4 additions & 3 deletions examples/pyvista/linked_view.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# import os
import pyvista as pv
from pyvista import examples

from trame.app import get_server
from trame.ui.html import DivLayout
from trame.widgets import html, client, vtk as vtk_widgets

from trame.widgets import client, html
from trame.widgets import vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = True # "USE_WASM" in os.environ
Expand Down Expand Up @@ -51,7 +52,7 @@ def _ui(self):
if WASM:
self.html_view = vtklocal.LocalView(self.render_window)
for w in self.widgets:
self.html_view.register_widget(w)
self.html_view.register_vtk_object(w)
else:
self.html_view = vtk_widgets.VtkRemoteView(
self.render_window, interactive_ratio=1
Expand Down
175 changes: 175 additions & 0 deletions examples/validation/camera_jump.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
import asyncio

# Required for vtk factory
import vtkmodules.vtkRenderingOpenGL2 # noqa
from trame.app import TrameApp, asynchronous
from trame.decorators import change
from trame.ui.html import DivLayout
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkInteractionStyle import vtkInteractorStyleSwitch # noqa
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkRenderer,
vtkRenderWindow,
vtkRenderWindowInteractor,
)

from trame.widgets import client, html
from trame_vtklocal.widgets import vtklocal

CLIENT_TYPE = "vue3"

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


def create_vtk_pipeline():
renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
renderWindow.AddRenderer(renderer)

renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindowInteractor.GetInteractorStyle().SetCurrentStyleToTrackballCamera()

cone = vtkConeSource()

mapper = vtkPolyDataMapper()
mapper.SetInputConnection(cone.GetOutputPort())

actor = vtkActor()
actor.SetMapper(mapper)

renderer.AddActor(actor)
renderer.SetBackground(0.1, 0.2, 0.4)
renderer.ResetCamera()

return renderWindow, cone, actor


class DemoApp(TrameApp):
def __init__(self, server=None):
# dispose after unmount should only work with vue3
super().__init__(server, client_type=CLIENT_TYPE)
self.delta = 1
self.server.cli.add_argument(
"--mode",
default="wasm32",
)
self.server.cli.add_argument(
"--exec",
default="sync",
)
self.server.cli.add_argument(
"--rendering",
default="webgl",
)
args, _ = self.server.cli.parse_known_args()
self.state.mode = args.mode
self.state.exec = args.exec
self.state.rendering = args.rendering

self.render_window, self.cone, self.actor = create_vtk_pipeline()
self._build_ui()

def reset_camera(self):
self.ctx.view.reset_camera()

@change("resolution")
def on_resolution_change(self, resolution, **_):
self.cone.SetResolution(int(resolution))
self.ctx.view.update_throttle(
resolution=resolution
) # provide custom content on update

@change("play")
def on_play_change(self, play, **_):
if play:
asynchronous.create_task(self._animate())

async def _animate(self):
while self.state.play:
await asyncio.sleep(0.01)

resolution = self.cone.resolution

if resolution > 60:
self.delta = -1
if resolution < 4:
self.delta = +1

self.on_resolution_change(resolution + self.delta)

def _build_ui(self):
with DivLayout(self.server) as self.ui:
client.Style("body { margin: 0; }")
with html.Div(
style="position: absolute; left: 0; top: 0; width: 100vw; height: 100vh;",
v_if=("mounted", True),
):
self.html_view = vtklocal.LocalView(
self.render_window,
ctx_name="view",
throttle_rate=20,
config=("{ mode, rendering, exec }",),
)
with html.Div(
style="""
position: absolute;
left: 1rem;
right: 1rem;
top: 1rem;
display: flex;
padding: 10px;
background: white;
gap: 15px;
"""
):
html.Div("Resolution")
html.Input(
type="range",
v_model=("resolution", 6),
min=3,
max=60,
step=1,
)

with html.Select(v_model=("mode", "wasm32")):
html.Option("wasm32")
html.Option("wasm64")
with html.Select(v_model=("exec", "sync")):
html.Option("sync")
html.Option("async")
with html.Select(v_model=("rendering", "webgl")):
html.Option("webgl")
html.Option("webgpu")

html.Div("Animate")
html.Input(
type="checkbox",
v_model=("play", False),
)
html.Div("Component mounted")
html.Input(
type="checkbox",
v_model=("mounted", True),
)
html.Button("Dispose Runtime", click=self.ctx.view.dispose_wasm_runtime)
html.Button(
"Dispose Session", click=self.ctx.view.dispose_remote_session
)
html.Button(
"Reset Camera",
click=self.reset_camera,
)


# -----------------------------------------------------------------------------
# Main
# -----------------------------------------------------------------------------

if __name__ == "__main__":
app = DemoApp()
app.server.start()
Loading
Loading