trame的VTK小部件
项目描述
trame-vtk通过组件扩展trame,这些组件可以与VTK和/或ParaView接口。
trame中的VTK集成允许您通过利用VTK库的Python封装来创建丰富的可视化和数据处理应用程序。有多个组件可供选择,您可以使用VTK进行数据处理和/或渲染。trame允许您选择是否要利用远程渲染,或者客户端是否应该通过底层的vtk.js进行渲染。
安装
trame-vtk可以使用pip安装
pip install --upgrade trame-vtk
用法
前往Trame教程,学习如何使用此库并开始构建您自己的应用程序。
API参考文档提供了API级别的文档。
许可证
trame-vtk 采用 BSD-3-Clause 许可协议提供。更多详情,请参阅 LICENSE。选择此许可是为了与 VTK 和 ParaView 使用相同的许可,这些许可可以通过此库公开。
社区
喜欢 trame 吗?
开发:在推送到 PyPI 之前获取客户端
要更新客户端代码,在更新目标版本时运行以下命令行
bash .fetch_externals.sh
Trame 小部件
VtkRemoteView
VtkRemoteView 组件依赖于服务器进行渲染,通过将您的 vtkRenderWindow 绑定到它来简单地通过发送图像到客户端。该组件提供了图像大小和质量的控制,以减少交互时的延迟。
如何使用它?
该组件允许您直接访问 vtk.js 交互器的事件,以便您可以将自己的 Python 方法绑定到它们。可用的事件列表可以在 此处 找到。
该组件还提供了一个方便的方法,在您在 Python 端修改场景时将新图像推送到客户端。
from trame.widgets import vtk
def end():
pass
remote_view = vtk.vtkRemoteView(
view=..., # Instance of vtkRenderWindow (required)
ref=..., # Identifier for this component
interactive_quality=60, # [0, 100] 0 for fastest render, 100 for best quality
interactive_ratio=..., # [0.1, 1] Image size scale factor while interacting
interactor_events=( # Enable vtk.js interactor events for method binding
"events",
["EndAnimation"],
),
EndAnimation=end, # Bind method to the enabled event
)
remote_view.update() # Force image to be pushed to client
示例
VtkLocalView
VtkLocalView 组件依赖于服务器来定义 vtkRenderWindow,但之后只与客户端交换几何形状。服务器不需要 GPU,因为没有在服务器上发生渲染。vtkRenderWindow 仅用于检索场景数据和参数(着色,表示等)。通过依赖相同的 vtkRenderWindow,您可以轻松地从 VtkRemoteView 切换到 VtkLocalView 或反之亦然。该组件提供了控制鼠标交互与摄像机映射的方法。默认设置模拟默认 VTK 交互器样式,因此您很少需要覆盖到 interactor_settings。
如何使用它?
该组件允许您直接访问 vtk.js 交互器事件,以便您可以将自己的 Python 方法绑定到它们。可用的事件列表可以在 此处 找到。
该组件还提供了一个方便的方法,在您在 Python 端修改场景时将场景推送到客户端。
from trame.widgets import vtk
def end():
pass
local_view = vtk.VtkLocalView(
view=..., # Instance of vtkRenderWindow (required)
ref=..., # Identifier for this component
context_name=..., # Namespace for geometry cache
interactor_settings=..., # Options for camera controls. See below.
interactor_events=( # Enable vtk.js interactor events for method binding
"events",
['EndAnimation'],
),
EndAnimation=end, # Bind method to the enabled event
)
local_view.update() # Force geometry to be pushed
交互器设置
对于 interactor_settings,我们期望一个鼠标事件类型列表,并将其链接到操作。以下示例是默认使用的内容
interactor_settings=[
{
button: 1,
action: 'Rotate',
}, {
button: 2,
action: 'Pan',
}, {
button: 3,
action: 'Zoom',
scrollEnabled: true,
}, {
button: 1,
action: 'Pan',
shift: true,
}, {
button: 1,
action: 'Zoom',
alt: true,
}, {
button: 1,
action: 'ZoomToMouse',
control: true,
}, {
button: 1,
action: 'Roll',
alt: true,
shift: true,
}
]
可以使用以下属性集来标识鼠标事件
属性 |
值 |
描述 |
---|---|---|
button |
1, 2, 3 |
哪个按钮应该按下 |
shift |
true/false |
是否按下了 Shift 键 |
alt |
true/false |
是否按下了 Alt 键 |
control |
true/false |
是否按下了 Ctrl 键 |
scrollEnabled |
true/false |
某些操作也可以通过滚动触发 |
dragEnabled |
true/false |
主要用于禁用默认的拖动行为 |
操作可以是以下之一
操作 |
描述 |
---|---|
平移 |
将在与摄像机垂直的平面上平移对象 |
缩放 |
将根据拖动方向更靠近或远离对象进行缩放 |
旋转 |
将在视向方向上围绕对象旋转 |
ZoomToMouse |
将在保持鼠标最初下方的位置不变的情况下进行缩放 |
示例
VtkRemoteLocalView
“VtkRemoteLocalView”组件是“VtkLocalView”和“VtkRemoteView”的结合,用户可以动态选择想要使用的模式。当实例化一个“VtkRemoteLocalView”时,会创建多个变量和触发器,以便更容易地控制视图。
如何使用它?
from trame.html import vtk
rl_view = vtk.VtkRemoteLocalView(
view=..., # Instance of vtkRenderWindow (required)
# Just VtkRemoteLocalView params
namespace=..., # Prefix for variables and triggers. See below. (required)
mode="local", # Decide between local or remote. See below.
# VtkRemoteView params
**remote_view_params,
# VtkLocalView params
**local_view_params,
)
rl_view.update_geometry() # Force update to geometry
rl_view.update_image() # Force update to image
rl_view.view() # Get linked vtkRenderWindow instance
命名空间参数
构建一个“VtkRemoteLocalView”会设置一些变量,这些变量以命名空间为前缀。以下示例中使用了“namespace="view"”。
变量 |
描述 |
---|---|
viewId |
str表示vtkRenderWindow的ID |
viewMode |
local`or `remote用于控制向用户显示哪个视图 |
构建一个“VtkRemoteLocalView”还会设置一些触发器。
触发器 |
描述 |
---|---|
viewCamera |
如果没有提供参数调用,服务器会将相机推送到客户端 |
viewAnimateStart |
开始动画循环以持续渲染 |
viewAnimateStop |
停止动画循环 |
命名空间也将用作ref=,除非用户提供了。
模式参数
模式由变量{namespace}Mode驱动,但可以在实例化时提供,以覆盖默认值并使用JavaScript表达式代替默认变量。此属性的行为与任何trame属性相同,除了我们不会将左侧注册为状态条目,因为我们已经在{namespace}Mode下有一个了。这意味着我们将评估表达式的左侧,假设提供了一个元组,元组的右侧用于设置其初始值。
示例
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。