Skip to content

Commit b12c321

Browse files
authored
Merge pull request #7 from Kitware/widget-handling
fix(widgets): handle registration and state delivery
2 parents aef1996 + e95249b commit b12c321

33 files changed

+315
-62
lines changed

README.rst

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Installation
2020
# We need a VTK that has its wasm counterpart
2121
# This is the first version available with it
2222
# For ParaView (not yet supported), VTK don't need to be installed
23-
pip install "vtk==9.3.20240525.dev0" --extra-index-url https://wheels.vtk.org
23+
pip install "vtk==9.3.20240817.dev0" --extra-index-url https://wheels.vtk.org
2424
2525
2626
Development
@@ -64,11 +64,21 @@ Running examples
6464
# We need a VTK that has its wasm counterpart
6565
# This is the first version available with it
6666
# For ParaView (not yet supported), VTK don't need to be installed
67-
pip install "vtk==9.3.20240418.dev0" --extra-index-url https://wheels.vtk.org
67+
pip install "vtk==9.3.20240810.dev0" --extra-index-url https://wheels.vtk.org
6868
6969
# regular trame app
7070
python ./examples/vtk/cone.py
7171
7272
7373
Some example are meant to test and validate WASM rendering.
7474
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.
75+
76+
SharedArrayBuffer
77+
----------------------------------------
78+
79+
To enable SharedArrayBuffer within trame you can run the following.
80+
81+
.. code-block:: console
82+
83+
export WSLINK_HTTP_HEADERS=./http_headers.json
84+
python ./examples/vtk/cone.py

examples/pv/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# ParaView support
2+
3+
Not Supported yet but we hope to get it working with 5.14 or nightly after 5.13 release.
4+
15
## Setup
26

37
```

examples/pv/cone.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
class DemoApp:
1717
def __init__(self, server=None):
1818
self.server = get_server(server, client_type=CLIENT_TYPE)
19+
20+
# enable shared array buffer
21+
self.server.http_headers.shared_array_buffer = True
22+
1923
self.cone = simple.Cone()
2024
self.representation = simple.Show()
2125
self.view = simple.Render()

examples/pyvista/basic.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import os
1+
# import os
22
import pyvista as pv
33
from pyvista import examples
44

@@ -7,7 +7,7 @@
77
from trame.widgets import html, client, vtk as vtk_widgets
88
from trame_vtklocal.widgets import vtklocal
99

10-
WASM = "USE_WASM" in os.environ
10+
WASM = True # "USE_WASM" in os.environ
1111

1212
# -----------------------------------------------------------------------------
1313

@@ -32,6 +32,10 @@ def setup_pyvista():
3232
class TrameApp:
3333
def __init__(self, server=None):
3434
self.server = get_server(server, client_type="vue3")
35+
36+
# enable shared array buffer
37+
self.server.http_headers.shared_array_buffer = True
38+
3539
self.render_window, self.widgets = setup_pyvista()
3640
self.html_view = None
3741
self.ui = self._ui()

examples/pyvista/bg_image.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import os
1+
# import os
22
import pyvista as pv
33
from pyvista import examples
44

@@ -7,7 +7,7 @@
77
from trame.widgets import html, client, vtk as vtk_widgets
88
from trame_vtklocal.widgets import vtklocal
99

10-
WASM = "USE_WASM" in os.environ
10+
WASM = True # "USE_WASM" in os.environ
1111

1212
# -----------------------------------------------------------------------------
1313

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

22-
return p.ren_win
23+
return p.ren_win, widgets
2324

2425

2526
# -----------------------------------------------------------------------------
@@ -28,7 +29,11 @@ def setup_pyvista():
2829
class TrameApp:
2930
def __init__(self, server=None):
3031
self.server = get_server(server, client_type="vue3")
31-
self.render_window = setup_pyvista()
32+
33+
# enable shared array buffer
34+
self.server.http_headers.shared_array_buffer = True
35+
36+
self.render_window, self.widgets = setup_pyvista()
3237
self.html_view = None
3338
self.ui = self._ui()
3439

@@ -40,6 +45,8 @@ def _ui(self):
4045
):
4146
if WASM:
4247
self.html_view = vtklocal.LocalView(self.render_window)
48+
for w in self.widgets:
49+
self.html_view.register_widget(w)
4350
else:
4451
self.html_view = vtk_widgets.VtkRemoteView(
4552
self.render_window, interactive_ratio=1

examples/pyvista/drap2dsurf.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import os
1+
# import os
22
import numpy as np
33
import pyvista as pv
44
from pyvista import examples
@@ -8,7 +8,7 @@
88
from trame.widgets import html, client, vtk as vtk_widgets
99
from trame_vtklocal.widgets import vtklocal
1010

11-
WASM = "USE_WASM" in os.environ
11+
WASM = True # "USE_WASM" in os.environ
1212

1313
# -----------------------------------------------------------------------------
1414

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

39-
return p.ren_win
40+
return p.ren_win, widgets
4041

4142

4243
# -----------------------------------------------------------------------------
@@ -45,7 +46,11 @@ def setup_pyvista():
4546
class TrameApp:
4647
def __init__(self, server=None):
4748
self.server = get_server(server, client_type="vue3")
48-
self.render_window = setup_pyvista()
49+
50+
# enable shared array buffer
51+
self.server.http_headers.shared_array_buffer = True
52+
53+
self.render_window, self.widgets = setup_pyvista()
4954
self.html_view = None
5055
self.ui = self._ui()
5156

@@ -57,6 +62,8 @@ def _ui(self):
5762
):
5863
if WASM:
5964
self.html_view = vtklocal.LocalView(self.render_window)
65+
for w in self.widgets:
66+
self.html_view.register_widget(w)
6067
else:
6168
self.html_view = vtk_widgets.VtkRemoteView(
6269
self.render_window, interactive_ratio=1

examples/pyvista/eye_dome_lighting.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import os
1+
# import os
22
import pyvista as pv
33
from pyvista import examples
44

@@ -7,7 +7,7 @@
77
from trame.widgets import html, client, vtk as vtk_widgets
88
from trame_vtklocal.widgets import vtklocal
99

10-
WASM = "USE_WASM" in os.environ
10+
WASM = True # "USE_WASM" in os.environ
1111

1212
# -----------------------------------------------------------------------------
1313

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

24-
return p.ren_win
25+
return p.ren_win, widgets
2526

2627

2728
# -----------------------------------------------------------------------------
@@ -30,7 +31,11 @@ def setup_pyvista():
3031
class TrameApp:
3132
def __init__(self, server=None):
3233
self.server = get_server(server, client_type="vue3")
33-
self.render_window = setup_pyvista()
34+
35+
# enable shared array buffer
36+
self.server.http_headers.shared_array_buffer = True
37+
38+
self.render_window, self.widgets = setup_pyvista()
3439
self.html_view = None
3540
self.ui = self._ui()
3641

@@ -42,6 +47,8 @@ def _ui(self):
4247
):
4348
if WASM:
4449
self.html_view = vtklocal.LocalView(self.render_window)
50+
for w in self.widgets:
51+
self.html_view.register_widget(w)
4552
else:
4653
self.html_view = vtk_widgets.VtkRemoteView(
4754
self.render_window, interactive_ratio=1

examples/pyvista/glyph.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ def setup_pyvista():
3232
class TrameApp:
3333
def __init__(self, server=None):
3434
self.server = get_server(server, client_type="vue3")
35+
36+
# enable shared array buffer
37+
self.server.http_headers.shared_array_buffer = True
38+
3539
self.render_window = setup_pyvista()
3640
self.html_view = None
3741
self.ui = self._ui()

examples/pyvista/isolines.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import os
1+
# import os
22
import pyvista as pv
33
from pyvista import examples
44

@@ -7,7 +7,7 @@
77
from trame.widgets import html, client, vtk as vtk_widgets
88
from trame_vtklocal.widgets import vtklocal
99

10-
WASM = "USE_WASM" in os.environ
10+
WASM = True # "USE_WASM" in os.environ
1111

1212
# -----------------------------------------------------------------------------
1313

@@ -31,6 +31,10 @@ def setup_pyvista():
3131
class TrameApp:
3232
def __init__(self, server=None):
3333
self.server = get_server(server, client_type="vue3")
34+
35+
# enable shared array buffer
36+
self.server.http_headers.shared_array_buffer = True
37+
3438
self.render_window = setup_pyvista()
3539
self.html_view = None
3640
self.ui = self._ui()

examples/pyvista/labels.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import os
21
import numpy as np
32
import pyvista as pv
43

@@ -7,7 +6,7 @@
76
from trame.widgets import html, client, vtk as vtk_widgets
87
from trame_vtklocal.widgets import vtklocal
98

10-
WASM = "USE_WASM" in os.environ
9+
WASM = True # "USE_WASM" in os.environ
1110

1211
# -----------------------------------------------------------------------------
1312

@@ -40,7 +39,7 @@ def get_point_along_spline(distance):
4039

4140
p = pv.Plotter()
4241
p.add_mesh(spline, scalars="arc_length", render_lines_as_tubes=True, line_width=10)
43-
p.add_point_labels(
42+
labels = p.add_point_labels(
4443
label_points,
4544
labels,
4645
always_visible=True,
@@ -61,9 +60,19 @@ def get_point_along_spline(distance):
6160
class TrameApp:
6261
def __init__(self, server=None):
6362
self.server = get_server(server, client_type="vue3")
63+
64+
# enable shared array buffer
65+
self.server.http_headers.shared_array_buffer = True
66+
6467
self.render_window = setup_pyvista()
6568
self.html_view = None
6669
self.ui = self._ui()
70+
self.server.state.change("scale")(self.update_scale)
71+
72+
def update_scale(self, scale, **_):
73+
print(scale)
74+
# self.text.SetTextScaleModeToViewport()
75+
# self.html_view.update()
6776

6877
def _ui(self):
6978
with DivLayout(self.server) as layout:
@@ -77,6 +86,14 @@ def _ui(self):
7786
self.html_view = vtk_widgets.VtkRemoteView(
7887
self.render_window, interactive_ratio=1
7988
)
89+
html.Input(
90+
type="range",
91+
min=0.5,
92+
max=4,
93+
step=0.1,
94+
v_model=("scale", 1),
95+
style="position: absolute; top: 10px; left: 10px; z-index: 100; width: calc(100vw - 20px);",
96+
)
8097

8198
return layout
8299

examples/pyvista/linked_view.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import os
1+
# import os
22
import pyvista as pv
33
from pyvista import examples
44

@@ -7,7 +7,7 @@
77
from trame.widgets import html, client, vtk as vtk_widgets
88
from trame_vtklocal.widgets import vtklocal
99

10-
WASM = "USE_WASM" in os.environ
10+
WASM = True # "USE_WASM" in os.environ
1111

1212
# -----------------------------------------------------------------------------
1313

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

30-
return p.ren_win
31+
return p.ren_win, widgets
3132

3233

3334
# -----------------------------------------------------------------------------
@@ -36,7 +37,11 @@ def setup_pyvista():
3637
class TrameApp:
3738
def __init__(self, server=None):
3839
self.server = get_server(server, client_type="vue3")
39-
self.render_window = setup_pyvista()
40+
41+
# enable shared array buffer
42+
self.server.http_headers.shared_array_buffer = True
43+
44+
self.render_window, self.widgets = setup_pyvista()
4045
self.html_view = None
4146
self.ui = self._ui()
4247

@@ -48,6 +53,8 @@ def _ui(self):
4853
):
4954
if WASM:
5055
self.html_view = vtklocal.LocalView(self.render_window)
56+
for w in self.widgets:
57+
self.html_view.register_widget(w)
5158
else:
5259
self.html_view = vtk_widgets.VtkRemoteView(
5360
self.render_window, interactive_ratio=1

examples/pyvista/pbr.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import os
1+
# import os
22
import pyvista as pv
33
from pyvista import examples
44

@@ -7,7 +7,7 @@
77
from trame.widgets import html, client, vtk as vtk_widgets
88
from trame_vtklocal.widgets import vtklocal
99

10-
WASM = "USE_WASM" in os.environ
10+
WASM = True # "USE_WASM" in os.environ
1111

1212
# -----------------------------------------------------------------------------
1313

@@ -33,6 +33,10 @@ def setup_pyvista():
3333
class TrameApp:
3434
def __init__(self, server=None):
3535
self.server = get_server(server, client_type="vue3")
36+
37+
# enable shared array buffer
38+
self.server.http_headers.shared_array_buffer = True
39+
3640
self.render_window = setup_pyvista()
3741
self.html_view = None
3842
self.ui = self._ui()

0 commit comments

Comments
 (0)