File: data_from_remote_url.py

package info (click to toggle)
python-trame 3.12.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 101,620 kB
  • sloc: python: 13,515; sh: 183; javascript: 93; makefile: 7
file content (91 lines) | stat: -rw-r--r-- 2,648 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
r"""
Installation requirements:
    pip install trame trame-vuetify trame-vtk vtk
"""

import tempfile
from urllib.error import HTTPError
from urllib.request import urlretrieve

import vtkmodules.vtkRenderingOpenGL2  # noqa
from vtkmodules.vtkFiltersGeometry import vtkGeometryFilter

# VTK imports
from vtkmodules.vtkIOXML import vtkXMLUnstructuredGridReader
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkDataSetMapper,
    vtkRenderer,
    vtkRenderWindow,
)

# Trame imports
from trame.app import get_server
from trame.ui.vuetify3 import SinglePageLayout
from trame.widgets import vtk as vtk_widgets
from trame.widgets import vuetify3 as vuetify

server = get_server(client_type="vue3")
server.cli.add_argument(
    "--remote-url",
    dest="remote_url",
    help="Remote URL pointing to a VTU file.",
    default="https://github.com/Kitware/trame/raw/master/examples/data/disk_out_ref.vtu",
)
(args, _unknown) = server.cli.parse_known_args()

state, ctrl = server.state, server.controller

with tempfile.NamedTemporaryFile() as fp:
    try:
        print(f"using local file {fp.name}")
        urlretrieve(args.remote_url, fp.name)
        reader = vtkXMLUnstructuredGridReader()
        reader.SetFileName(fp.name)
        reader.Update()
    except HTTPError as e:
        print(RuntimeError(f"Failed to download {args.remote_url}. {e.reason}"))
        raise e


dataset = reader.GetOutput()

renderer = vtkRenderer()
renderer.SetBackground(1, 1, 1)
render_window = vtkRenderWindow()
render_window.AddRenderer(renderer)

surface_filter = vtkGeometryFilter()
surface_filter.SetInputConnection(reader.GetOutputPort())
surface_filter.SetPassThroughPointIds(True)

mapper = vtkDataSetMapper()
mapper.SetInputConnection(surface_filter.GetOutputPort())
actor = vtkActor()
actor.GetProperty().SetOpacity(0.5)
actor.SetMapper(mapper)

renderer.AddActor(actor)
renderer.ResetCamera()


state.trame__title = "Fetch Remote URL example"
ctrl.on_server_ready.add(ctrl.view_update)

with SinglePageLayout(server) as layout:
    layout.title.set_text("Unstructured grid from remote URL")

    with layout.content:
        with vuetify.VContainer(fluid=True, classes="fill-height pa-0 ma-0"):
            with vuetify.VRow(dense=True, style="height: 100%;"):
                with vuetify.VCol(
                    classes="pa-0",
                    style="border-right: 1px solid #ccc; position: relative;",
                ):
                    view = vtk_widgets.VtkLocalView(
                        render_window,
                    )
                    ctrl.view_update = view.update

if __name__ == "__main__":
    server.start()