ManimGL 中的交互式开发是一项强大的功能,它允许您暂停动画并通过 IPython shell 或直接的鼠标/键盘操作实时与动画进行交互。这对于快速开发、调试和微调动画特别有价值,无需重新启动渲染过程。
本页面介绍了如何进入交互模式、使用交互式 shell 以及在场景中直接操作对象。有关以编程方式创建动画的信息,请参阅“动画系统”页面。
进入交互模式最简单的方法是在场景的 construct 方法中调用 self.embed()
您也可以在使用 ManimGL 时使用 -e 标志在特定行插入一个嵌入点
这会在您代码的第 10 行自动插入 self.embed()。
来源:manimlib/scene/scene.py202-218 manimlib/scene/scene_embed.py201-218 manimlib/__main__.py34-46
启动交互式 shell 时,您可以访问:
embed() 之前定义的所有变量都可以在 shell 中使用。self.)交互式 shell 提供以下快捷函数:
| 快捷键 | 等效 | 描述 |
|---|---|---|
play | self.play | 运行动画 |
wait | self.wait | 暂停给定时间 |
add | self.add | 将对象添加到场景 |
remove | self.remove | 从场景中移除对象 |
clear | self.clear | 清除所有对象 |
focus | self.focus | 聚焦窗口 |
save_state | self.save_state | 保存当前场景状态 |
undo | self.undo | 恢复到之前的状态 |
redo | self.redo | 重做已撤销的操作 |
i2g | self.i2g | 从 ID 获取组 |
i2m | self.i2m | 从 ID 获取 mobject |
checkpoint_paste | 运行带检查点的复制代码 | |
clear_checkpoints | 清除保存的检查点 | |
reload | 重新加载场景 |
来源:manimlib/scene/scene_embed.py63-79 manimlib/scene/scene.py651-677
来源:manimlib/scene/scene.py202-218 manimlib/scene/scene_embed.py22-204 manimlib/scene/interactive_scene.py65-693 manimlib/window.py23-243
InteractiveScene 类提供了通过鼠标和键盘控件的高级对象选择和操作功能。
s 并单击以选择一个对象。s 并拖动以在矩形内选择对象。u 取消选择所有对象。Cmd/Ctrl + a 选择所有对象。Cmd/Ctrl + t 在顶层和详细选择之间切换。g 来抓取和移动选定的对象。h 将移动限制在水平方向(X 轴)。v 将移动限制在垂直方向(Y 轴)。t 调整选定对象的大小。c 显示选定对象的颜色调色板。Cmd/Ctrl + c 复制选定的对象。Cmd/Ctrl + v 粘贴对象/文本。Cmd/Ctrl + x 剪切选定的对象。Cmd/Ctrl + z 撤销。Cmd/Ctrl + Shift + z 重做。Cmd/Ctrl + g 对选定对象进行分组。Cmd/Ctrl + Shift + g 对选定对象进行取消分组。f 平移相机。d 进行 3D 旋转。r 重置相机视图。k 切换准星光标。i 显示坐标信息。来源:manimlib/scene/interactive_scene.py86-141 manimlib/default_config.yml103-116
来源:manimlib/scene/scene.py202-218 manimlib/scene/scene_embed.py35-99 manimlib/window.py155-239
这是一个展示如何使用交互式开发的完整示例。
在交互式 shell 中,您可以尝试:
检查点系统允许您通过复制代码块并使用 checkpoint_paste() 来重新运行它们。
# Animation 1)。checkpoint_paste()。checkpoint_paste() - 场景将恢复到第一次运行时的状态。这对于迭代优化动画序列特别有用。
来源:manimlib/scene/scene_embed.py151-203
与 --autoreload 标志一起使用时,对 Python 模块的更改将在交互式 shell 中被自动检测和重新加载。
您也可以通过在 shell 中调用 reload() 来手动重新加载带有更改的场景。
来源:manimlib/scene/scene_embed.py142-150 manimlib/config.py329-331 manimlib/module_loader.py23-176
用于实验:交互模式非常适合尝试不同的动画和参数。
保存状态:在进行重大更改之前使用 save_state() 以便轻松撤销。
检查点注释:使用一致的注释开始代码块,以利用检查点系统。
使用简短命令:请记住在 shell 中使用命令的简短形式(play() 而不是 self.play())。
窗口焦点:如果窗口失去焦点,请使用 focus() 将其重新激活。
对象 ID 访问:使用 i2m(id) 通过 ID 获取对象,这在引用先前创建的对象时很有用。