Skip to content

Commit f6f8c93

Browse files
jspanchujourdain
authored andcommitted
fix(wasm): handle different WASM file naming for older versions
1 parent 3cf5a41 commit f6f8c93

File tree

2 files changed

+46
-22
lines changed

2 files changed

+46
-22
lines changed

examples/vtk/file_viewer.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from trame_vtklocal.widgets import vtklocal
55
from trame.decorators import TrameApp, trigger
66

7-
from vtkmodules.vtkIOXML import vtkXMLPolyDataReader
7+
from vtkmodules.vtkIOXML import vtkXMLPolyDataReader, vtkXMLMultiBlockDataReader
88
from vtkmodules.vtkRenderingCore import (
99
vtkActor,
1010
vtkPolyDataMapper,
@@ -33,15 +33,25 @@ def create_vtk_pipeline(file_name):
3333
renderWindowInteractor.SetRenderWindow(renderWindow)
3434
renderWindowInteractor.GetInteractorStyle().SetCurrentStyleToTrackballCamera()
3535

36-
reader = vtkXMLPolyDataReader(file_name=file_name)
37-
38-
mapper = vtkPolyDataMapper(scalar_visibility=False)
39-
mapper.SetInputConnection(reader.GetOutputPort())
40-
41-
actor = vtkActor()
42-
actor.SetMapper(mapper)
43-
44-
renderer.AddActor(actor)
36+
if file_name.endswith(".vtm"):
37+
reader = vtkXMLMultiBlockDataReader(file_name=file_name)
38+
reader.Update()
39+
mbdset = reader.GetOutput()
40+
for i in range(mbdset.GetNumberOfBlocks()):
41+
block = mbdset.GetBlock(i)
42+
mapper = vtkPolyDataMapper(scalar_visibility=False)
43+
mapper.SetInputDataObject(0, block)
44+
actor = vtkActor()
45+
actor.SetMapper(mapper)
46+
renderer.AddActor(actor)
47+
else:
48+
reader = vtkXMLPolyDataReader(file_name=file_name)
49+
mapper = vtkPolyDataMapper(scalar_visibility=False)
50+
mapper.SetInputConnection(reader.GetOutputPort())
51+
actor = vtkActor()
52+
actor.SetMapper(mapper)
53+
54+
renderer.AddActor(actor)
4555
renderer.SetBackground(0.1, 0.2, 0.4)
4656
renderer.ResetCamera()
4757

src/trame_vtklocal/module/wasm.py

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import os
55
import shutil
66
import tarfile
7+
from packaging.version import parse
78

89

910
def run_async(coroutine):
@@ -86,18 +87,31 @@ def register_wasm(serve_path, **kwargs):
8687
# get wasm version and url
8788
wasm_url = kwargs.get("wasm_url", wasm_url)
8889

89-
if (
90-
not dest_directory.joinpath(f"{wasm_base_name}WebAssembly.mjs").exists()
91-
or not dest_directory.joinpath(f"{wasm_base_name}WebAssembly.wasm").exists()
92-
or not dest_directory.joinpath(
93-
f"{wasm_base_name}WebAssemblyAsync.mjs"
94-
).exists()
95-
or not dest_directory.joinpath(
96-
f"{wasm_base_name}WebAssemblyAsync.wasm"
97-
).exists()
98-
):
99-
# if the wasm directory does not exist, we need to download it
100-
run_async(setup_wasm_directory(dest_directory, wasm_url))
90+
# if the required wasm files do not exist, we need to download them
91+
# Versions before 9.5.20250531 use different WASM file naming conventions.
92+
# this cutoff distinguishes between old and new formats.
93+
if parse(version) < parse("9.5.20250531"):
94+
# For older versions, the wasm files are named differently.
95+
if (
96+
not dest_directory.joinpath("vtkWasmSceneManager.mjs").exists()
97+
or not dest_directory.joinpath("vtkWasmSceneManager.wasm").exists()
98+
):
99+
run_async(setup_wasm_directory(dest_directory, wasm_url))
100+
else:
101+
if (
102+
not dest_directory.joinpath(f"{wasm_base_name}WebAssembly.mjs").exists()
103+
or not dest_directory.joinpath(
104+
f"{wasm_base_name}WebAssembly.wasm"
105+
).exists()
106+
or not dest_directory.joinpath(
107+
f"{wasm_base_name}WebAssemblyAsync.mjs"
108+
).exists()
109+
or not dest_directory.joinpath(
110+
f"{wasm_base_name}WebAssemblyAsync.wasm"
111+
).exists()
112+
):
113+
run_async(setup_wasm_directory(dest_directory, wasm_url))
114+
101115
return dict(
102116
state={
103117
"__trame_vtklocal_wasm_url": BASE_URL,

0 commit comments

Comments
 (0)