直接跳到内容

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 面板处理对象的渲染和与视图的交互,我们不需要调用 vtkRenderWindowRender 方法(这会弹出传统的 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

属性

属性名说明类型默认值
objectvtkRenderWindow 实例vtkRenderWindow None
axes在 3D 视图中构造的坐标轴的参数字典。必须至少包含 xtickerytickerztickerdict 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_classesCSS类名列表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

VTK 三维可视化已经加载完毕