#header-mark#
VTK 三维可视化
PnVTK
组件可以在 Panel 应用程序中渲染 VTK 场景,使得可以与复杂的 3D 几何体进行交互。 它允许在 Python 端定义的 vtkRenderWindow
与通过 vtk-js 在组件中显示的窗口之间保持状态同步。 在这种情况下,Python 充当服务器,向客户端发送有关场景的信息。 同步只在一个方向进行:Python => JavaScript。在 JavaScript 端所做的修改不会反映回 Python 的 vtkRenderWindow
。
底层实现为panel.pane.VTK
,参数基本一致,参考文档:https://panel.holoviz.org/reference/panes/VTK.html
基本用法
与直接使用 VTK
相比,在 Panel 中使用它有一些区别。由于 VTK 面板处理对象的渲染和与视图的交互,我们不需要调用 vtkRenderWindow
的 Render
方法(这会弹出传统的 VTK 窗口),也不需要指定 vtkRenderWindowInteractor
。
我们还可以向场景添加其他 actor,然后调用 synchronize
方法来更新组件:
与 PyVista 集成
这些示例大多使用 PyVista 库作为 VTK 的便捷接口。
虽然这些示例通常可以重写为仅依赖于 VTK 本身,但 pyvista
支持简洁的 Python 语法,用于处理 VTK 对象所需的主要功能。
例如,上面的 VTK 示例可以使用 PyVista 重写如下:
导出场景
场景可以导出,生成的文件可以由官方的 vtk-js 场景导入器加载:
高级用法和交互性
键盘绑定和方向部件
PnVTK
组件支持键盘绑定和方向部件,以增强用户交互体验:
键盘绑定允许用户使用以下键:
- s: 将所有 actor 表示设置为表面
- w: 将所有 actor 表示设置为线框
- v: 将所有 actor 表示设置为顶点
- r: 居中 actor 并移动相机,使所有 actor 可见
添加坐标轴
使用 axes
参数可以在 3D 视图中显示坐标轴:
API
属性
属性名 | 说明 | 类型 | 默认值 |
---|---|---|---|
object | vtkRenderWindow 实例 | vtkRenderWindow | None |
axes | 在 3D 视图中构造的坐标轴的参数字典。必须至少包含 xticker 、yticker 和 zticker | dict | None |
camera | 反映 VTK 相机当前状态的字典 | dict | None |
enable_keybindings | 激活/禁用键盘绑定的布尔值。绑定的键有:s(将所有 actor 表示设置为表面)、w(将所有 actor 表示设置为线框)、v(将所有 actor 表示设置为顶点)、r(居中 actor 并移动相机,使所有 actor 可见) | boolean | False |
orientation_widget | 激活/禁用 3D 面板中的方向部件的布尔值 | boolean | False |
interactive_orientation_widget | 如果为 True,则方向部件可点击并允许将场景旋转到正交投影之一 | boolean | False |
sizing_mode | 尺寸调整模式 | str | 'fixed' |
width | 宽度 | int, str | None |
height | 高度 | int, str | None |
min_width | 最小宽度 | int | None |
min_height | 最小高度 | int | None |
max_width | 最大宽度 | int | None |
max_height | 最大高度 | int | None |
margin | 外边距 | int, tuple | 5 |
css_classes | CSS类名列表 | list | [] |
属性值
actors
:返回场景中的 vtkActors 列表vtk_camera
:返回组件持有的渲染器的 vtkCamera
Slots
插槽名 | 说明 |
---|---|
default | 自定义默认内容 |
方法
方法名 | 说明 | 参数 |
---|---|---|
set_background | 设置场景背景颜色为 RGB 颜色 | r: float, g: float, b: float |
synchronize | 同步 Python 端 vtkRenderWindow 对象状态与 JavaScript | 无 |
unlink_camera | 创建一个新的 vtkCamera 对象,允许面板拥有自己的相机 | 无 |
link_camera | 设置两个面板共享相同的相机 | other: VTK |
export_scene | 导出场景并生成可以被官方 vtk-js 场景导入器加载的文件 | filename: str |
Controls
src/examples/panel_vuepy/panes/VTK