File: 329.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 (96 lines) | stat: -rw-r--r-- 3,040 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
import os
from pathlib import Path

import vtk

# Required for rendering initialization, not necessary for
# local rendering, but doesn't hurt to include it
import vtkmodules.vtkRenderingOpenGL2  # noqa

# Required for interactor initialization
from vtkmodules.vtkInteractionStyle import vtkInteractorStyleSwitch  # noqa
from vtkmodules.vtkIOLegacy import vtkUnstructuredGridReader
from vtkmodules.vtkRenderingCore import (
    vtkRenderer,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
)

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

CURRENT_DIRECTORY = os.path.abspath(os.path.dirname(__file__))

# -----------------------------------------------------------------------------
# VTK pipeline
# -----------------------------------------------------------------------------

renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindow.OffScreenRenderingOn()

renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindowInteractor.GetInteractorStyle().SetCurrentStyleToTrackballCamera()


# Read the data

# reader = vtkStructuredPointsReader()
reader = vtkUnstructuredGridReader()

reader.SetFileName(str(Path(__file__).with_name("lv_fiber.vtk").absolute()))
reader.Update()
# 2. 创建箭头源
arrow_source = vtk.vtkArrowSource()
arrow_source.Update()
# 3. 创建箭头映射器
arrow_mapper = vtk.vtkGlyph3DMapper()
arrow_mapper.SetInputConnection(reader.GetOutputPort())
arrow_mapper.SetSourceConnection(arrow_source.GetOutputPort())
arrow_mapper.SetScaleFactor(1.0)  # 调整箭头大小
arrow_mapper.ScalingOn()
arrow_mapper.Update()
# 4. 创建箭头演员
arrow_actor = vtk.vtkActor()
arrow_actor.SetMapper(arrow_mapper)
# 7. 添加箭头演员到渲染器
renderer.AddActor(arrow_actor)
# 8. 设置渲染器背景颜色和相机位置
renderer.SetBackground(1.0, 1.0, 1.0)
# 9. 设置箭头及轴的尺寸
arrow_source.SetTipLength(0.1)  # 箭头尖部的长度
arrow_source.SetTipRadius(0.05)  # 箭头尖部的半径
arrow_source.SetShaftRadius(0.02)  # 箭头杆的半径

renderer.ResetCamera()
renderWindow.Render()

# -----------------------------------------------------------------------------
# GUI
# -----------------------------------------------------------------------------

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

with SinglePageLayout(server) as layout:
    layout.title.set_text("Hello1 trame")

    with layout.content:
        with vuetify.VContainer(
            fluid=True,
            classes="pa-0 fill-height",
        ):
            view = vtk2.VtkRemoteView(renderWindow, interactive_ratio=1)
            # view = vtk2.VtkLocalView(renderWindow)


# -----------------------------------------------------------------------------
# Main
# -----------------------------------------------------------------------------

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