#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