Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(widgets): handle registration and state delivery #7

Merged
merged 11 commits into from
Aug 23, 2024
14 changes: 12 additions & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Installation
# We need a VTK that has its wasm counterpart
# This is the first version available with it
# For ParaView (not yet supported), VTK don't need to be installed
pip install "vtk==9.3.20240525.dev0" --extra-index-url https://wheels.vtk.org
pip install "vtk==9.3.20240817.dev0" --extra-index-url https://wheels.vtk.org


Development
Expand Down Expand Up @@ -64,11 +64,21 @@ Running examples
# We need a VTK that has its wasm counterpart
# This is the first version available with it
# For ParaView (not yet supported), VTK don't need to be installed
pip install "vtk==9.3.20240418.dev0" --extra-index-url https://wheels.vtk.org
pip install "vtk==9.3.20240810.dev0" --extra-index-url https://wheels.vtk.org

# regular trame app
python ./examples/vtk/cone.py


Some example are meant to test and validate WASM rendering.
Some will default for remote rendering but if you want to force them to use WASM just run `export USE_WASM=1` before executing them.

SharedArrayBuffer
----------------------------------------

To enable SharedArrayBuffer within trame you can run the following.

.. code-block:: console

export WSLINK_HTTP_HEADERS=./http_headers.json
python ./examples/vtk/cone.py
4 changes: 4 additions & 0 deletions examples/pv/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# ParaView support

Not Supported yet but we hope to get it working with 5.14 or nightly after 5.13 release.

## Setup

```
Expand Down
4 changes: 4 additions & 0 deletions examples/pv/cone.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
class DemoApp:
def __init__(self, server=None):
self.server = get_server(server, client_type=CLIENT_TYPE)

# enable shared array buffer
self.server.http_headers.shared_array_buffer = True

self.cone = simple.Cone()
self.representation = simple.Show()
self.view = simple.Render()
Expand Down
8 changes: 6 additions & 2 deletions examples/pyvista/basic.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import os
# import os
import pyvista as pv
from pyvista import examples

Expand All @@ -7,7 +7,7 @@
from trame.widgets import html, client, vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = "USE_WASM" in os.environ
WASM = True # "USE_WASM" in os.environ

# -----------------------------------------------------------------------------

Expand All @@ -32,6 +32,10 @@ def setup_pyvista():
class TrameApp:
def __init__(self, server=None):
self.server = get_server(server, client_type="vue3")

# enable shared array buffer
self.server.http_headers.shared_array_buffer = True

self.render_window, self.widgets = setup_pyvista()
self.html_view = None
self.ui = self._ui()
Expand Down
17 changes: 12 additions & 5 deletions examples/pyvista/bg_image.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import os
# import os
import pyvista as pv
from pyvista import examples

Expand All @@ -7,7 +7,7 @@
from trame.widgets import html, client, vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = "USE_WASM" in os.environ
WASM = True # "USE_WASM" in os.environ

# -----------------------------------------------------------------------------

Expand All @@ -17,9 +17,10 @@ def setup_pyvista():
p.add_mesh(examples.load_airplane(), smooth_shading=True)
p.add_background_image(examples.mapfile)
p.reset_camera()
# p.show_axes() # FIXME
p.show_axes()
widgets = [r.axes_widget for r in p.renderers if hasattr(r, "axes_widget")]

return p.ren_win
return p.ren_win, widgets


# -----------------------------------------------------------------------------
Expand All @@ -28,7 +29,11 @@ def setup_pyvista():
class TrameApp:
def __init__(self, server=None):
self.server = get_server(server, client_type="vue3")
self.render_window = setup_pyvista()

# enable shared array buffer
self.server.http_headers.shared_array_buffer = True

self.render_window, self.widgets = setup_pyvista()
self.html_view = None
self.ui = self._ui()

Expand All @@ -40,6 +45,8 @@ def _ui(self):
):
if WASM:
self.html_view = vtklocal.LocalView(self.render_window)
for w in self.widgets:
self.html_view.register_widget(w)
else:
self.html_view = vtk_widgets.VtkRemoteView(
self.render_window, interactive_ratio=1
Expand Down
17 changes: 12 additions & 5 deletions examples/pyvista/drap2dsurf.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import os
# import os
import numpy as np
import pyvista as pv
from pyvista import examples
Expand All @@ -8,7 +8,7 @@
from trame.widgets import html, client, vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = "USE_WASM" in os.environ
WASM = True # "USE_WASM" in os.environ

# -----------------------------------------------------------------------------

Expand All @@ -34,9 +34,10 @@ def setup_pyvista():
p.add_mesh(grid, cmap="seismic", clim=[-1, 1])
p.add_mesh(pv.PolyData(path), color="orange")
p.reset_camera()
# p.show_axes() # FIXME
p.show_axes()
widgets = [r.axes_widget for r in p.renderers if hasattr(r, "axes_widget")]

return p.ren_win
return p.ren_win, widgets


# -----------------------------------------------------------------------------
Expand All @@ -45,7 +46,11 @@ def setup_pyvista():
class TrameApp:
def __init__(self, server=None):
self.server = get_server(server, client_type="vue3")
self.render_window = setup_pyvista()

# enable shared array buffer
self.server.http_headers.shared_array_buffer = True

self.render_window, self.widgets = setup_pyvista()
self.html_view = None
self.ui = self._ui()

Expand All @@ -57,6 +62,8 @@ def _ui(self):
):
if WASM:
self.html_view = vtklocal.LocalView(self.render_window)
for w in self.widgets:
self.html_view.register_widget(w)
else:
self.html_view = vtk_widgets.VtkRemoteView(
self.render_window, interactive_ratio=1
Expand Down
15 changes: 11 additions & 4 deletions examples/pyvista/eye_dome_lighting.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import os
# import os
import pyvista as pv
from pyvista import examples

Expand All @@ -7,7 +7,7 @@
from trame.widgets import html, client, vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = "USE_WASM" in os.environ
WASM = True # "USE_WASM" in os.environ

# -----------------------------------------------------------------------------

Expand All @@ -20,8 +20,9 @@ def setup_pyvista():
p.enable_eye_dome_lighting()
p.reset_camera()
p.show_axes()
widgets = [r.axes_widget for r in p.renderers if hasattr(r, "axes_widget")]

return p.ren_win
return p.ren_win, widgets


# -----------------------------------------------------------------------------
Expand All @@ -30,7 +31,11 @@ def setup_pyvista():
class TrameApp:
def __init__(self, server=None):
self.server = get_server(server, client_type="vue3")
self.render_window = setup_pyvista()

# enable shared array buffer
self.server.http_headers.shared_array_buffer = True

self.render_window, self.widgets = setup_pyvista()
self.html_view = None
self.ui = self._ui()

Expand All @@ -42,6 +47,8 @@ def _ui(self):
):
if WASM:
self.html_view = vtklocal.LocalView(self.render_window)
for w in self.widgets:
self.html_view.register_widget(w)
else:
self.html_view = vtk_widgets.VtkRemoteView(
self.render_window, interactive_ratio=1
Expand Down
4 changes: 4 additions & 0 deletions examples/pyvista/glyph.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ def setup_pyvista():
class TrameApp:
def __init__(self, server=None):
self.server = get_server(server, client_type="vue3")

# enable shared array buffer
self.server.http_headers.shared_array_buffer = True

self.render_window = setup_pyvista()
self.html_view = None
self.ui = self._ui()
Expand Down
8 changes: 6 additions & 2 deletions examples/pyvista/isolines.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import os
# import os
import pyvista as pv
from pyvista import examples

Expand All @@ -7,7 +7,7 @@
from trame.widgets import html, client, vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = "USE_WASM" in os.environ
WASM = True # "USE_WASM" in os.environ

# -----------------------------------------------------------------------------

Expand All @@ -31,6 +31,10 @@ def setup_pyvista():
class TrameApp:
def __init__(self, server=None):
self.server = get_server(server, client_type="vue3")

# enable shared array buffer
self.server.http_headers.shared_array_buffer = True

self.render_window = setup_pyvista()
self.html_view = None
self.ui = self._ui()
Expand Down
23 changes: 20 additions & 3 deletions examples/pyvista/labels.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import os
import numpy as np
import pyvista as pv

Expand All @@ -7,7 +6,7 @@
from trame.widgets import html, client, vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = "USE_WASM" in os.environ
WASM = True # "USE_WASM" in os.environ

# -----------------------------------------------------------------------------

Expand Down Expand Up @@ -40,7 +39,7 @@ def get_point_along_spline(distance):

p = pv.Plotter()
p.add_mesh(spline, scalars="arc_length", render_lines_as_tubes=True, line_width=10)
p.add_point_labels(
labels = p.add_point_labels(
label_points,
labels,
always_visible=True,
Expand All @@ -61,9 +60,19 @@ def get_point_along_spline(distance):
class TrameApp:
def __init__(self, server=None):
self.server = get_server(server, client_type="vue3")

# enable shared array buffer
self.server.http_headers.shared_array_buffer = True

self.render_window = setup_pyvista()
self.html_view = None
self.ui = self._ui()
self.server.state.change("scale")(self.update_scale)

def update_scale(self, scale, **_):
print(scale)
# self.text.SetTextScaleModeToViewport()
# self.html_view.update()

def _ui(self):
with DivLayout(self.server) as layout:
Expand All @@ -77,6 +86,14 @@ def _ui(self):
self.html_view = vtk_widgets.VtkRemoteView(
self.render_window, interactive_ratio=1
)
html.Input(
type="range",
min=0.5,
max=4,
step=0.1,
v_model=("scale", 1),
style="position: absolute; top: 10px; left: 10px; z-index: 100; width: calc(100vw - 20px);",
)

return layout

Expand Down
17 changes: 12 additions & 5 deletions examples/pyvista/linked_view.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import os
# import os
import pyvista as pv
from pyvista import examples

Expand All @@ -7,7 +7,7 @@
from trame.widgets import html, client, vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = "USE_WASM" in os.environ
WASM = True # "USE_WASM" in os.environ

# -----------------------------------------------------------------------------

Expand All @@ -25,9 +25,10 @@ def setup_pyvista():
p.add_mesh(decimated, color=True, show_edges=True)
p.link_views() # link all the views
p.reset_camera()
# p.show_axes() # FIXME
p.show_axes()
widgets = [r.axes_widget for r in p.renderers if hasattr(r, "axes_widget")]

return p.ren_win
return p.ren_win, widgets


# -----------------------------------------------------------------------------
Expand All @@ -36,7 +37,11 @@ def setup_pyvista():
class TrameApp:
def __init__(self, server=None):
self.server = get_server(server, client_type="vue3")
self.render_window = setup_pyvista()

# enable shared array buffer
self.server.http_headers.shared_array_buffer = True

self.render_window, self.widgets = setup_pyvista()
self.html_view = None
self.ui = self._ui()

Expand All @@ -48,6 +53,8 @@ def _ui(self):
):
if WASM:
self.html_view = vtklocal.LocalView(self.render_window)
for w in self.widgets:
self.html_view.register_widget(w)
else:
self.html_view = vtk_widgets.VtkRemoteView(
self.render_window, interactive_ratio=1
Expand Down
8 changes: 6 additions & 2 deletions examples/pyvista/pbr.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import os
# import os
import pyvista as pv
from pyvista import examples

Expand All @@ -7,7 +7,7 @@
from trame.widgets import html, client, vtk as vtk_widgets
from trame_vtklocal.widgets import vtklocal

WASM = "USE_WASM" in os.environ
WASM = True # "USE_WASM" in os.environ

# -----------------------------------------------------------------------------

Expand All @@ -33,6 +33,10 @@ def setup_pyvista():
class TrameApp:
def __init__(self, server=None):
self.server = get_server(server, client_type="vue3")

# enable shared array buffer
self.server.http_headers.shared_array_buffer = True

self.render_window = setup_pyvista()
self.html_view = None
self.ui = self._ui()
Expand Down
Loading
Loading