File: 272.py

package info (click to toggle)
python-trame 3.12.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 101,620 kB
  • sloc: python: 13,515; sh: 183; javascript: 93; makefile: 7
file content (105 lines) | stat: -rw-r--r-- 3,255 bytes parent folder | download
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import vtkmodules.vtkRenderingOpenGL2  # noqa
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderer,
    vtkRenderWindow,
)

from trame.app import get_server
from trame.ui.vuetify import SinglePageLayout
from trame.widgets import vtk as vtk_widgets
from trame.widgets import vuetify

USING_WITH = True
server = get_server(client_type="vue2")
ctrl = server.controller


class App:
    def __init__(self, server):
        self.server = server
        self.layout = None
        self.container = None

        self.rw = vtkRenderWindow()
        self.renderer = vtkRenderer()
        self.rw.AddRenderer(self.renderer)
        self.cone_source = None

        # Just because we are deferring UI initialization
        vtk_widgets.initialize(server)
        vuetify.initialize(server)

        self.ctrl.add("on_server_ready")(self.ui)
        self.state.change("resolution")(self.update_resolution)

    @property
    def state(self):
        return self.server.state

    @property
    def ctrl(self):
        return self.server.controller

    def update_resolution(self, resolution, **kwargs):
        if self.cone_source:
            self.cone_source.SetResolution(resolution)
            self.ctrl.view_update()

    def add_cone(self):
        self.state.cone_disabled = True
        self.cone_source = vtkConeSource()
        mapper = vtkPolyDataMapper()
        mapper.SetInputConnection(self.cone_source.GetOutputPort())
        actor = vtkActor()
        actor.SetMapper(mapper)
        self.renderer.AddActor(actor)
        self.renderer.ResetCamera()

        if USING_WITH:
            with self.layout:  # Will call self.layout.flush_content() on_exit
                with self.container:
                    with vtk_widgets.VtkLocalView(self.rw) as view:
                        self.ctrl.view_update = view.update
                        self.ctrl.view_reset_camera = view.reset_camera
        else:
            # Could also be
            view = vtk_widgets.VtkLocalView(self.rw)
            self.ctrl.view_update = view.update
            self.ctrl.view_reset_camera = view.reset_camera
            self.container.add_child(view)
            self.layout.flush_content()

    def ui(self, **kwargs):
        with SinglePageLayout(self.server) as layout:
            self.layout = layout
            layout.title.set_text("Hello trame")
            layout.icon.click = self.ctrl.view_reset_camera

            with layout.toolbar:
                vuetify.VSpacer()
                vuetify.VSlider(
                    v_show=("cone_disabled",),
                    v_model=("resolution", 6),
                    max=60,
                    dense=True,
                    hide_details=True,
                )
                vuetify.VBtn(
                    "Cone Pipeline",
                    disabled=("cone_disabled", False),
                    click=self.add_cone,
                )

            with layout.content:
                self.container = vuetify.VContainer(
                    fluid=True,
                    classes="pa-0 fill-height",
                )


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