v0.5.0

Date:

2021年4月2日

贡献者

共有35人参与了此版本的贡献。名字旁边带有“+”的人是首次提交补丁的作者。

  • 阿贝尔·埃布克 +

  • 阿比吉特·穆提亚拉

  • 安东·巴尔迈尔 +

  • Aron

  • 本杰明·哈克尔

  • 博格丹·斯坦塞斯库 +

  • Darylgolden

  • 德文·尼尔

  • 游戏地牢 +

  • Hugues Devimeux

  • 杰森·维拉纽瓦

  • 卡皮尔·萨赫德瓦

  • KingWampy

  • 莱昂内尔·雷 +

  • 马克·米勒

  • 穆罕默德·阿尔-费特亚尼 +

  • 纳文·M·K

  • 尼可拉斯·德瓦利 +

  • 奥利弗 +

  • Roopesh +

  • 塞布·皮尔斯 +

  • aebkea +

  • friedkeenan

  • hydrobeam +

  • kolibril13

  • sparshg

  • tfglynn +

此版本中包含的补丁已由以下贡献者审核。

  • 阿贝尔·埃布克

  • 阿比吉特·穆提亚拉

  • 本杰明·哈克尔

  • 博格丹·斯坦切斯库

  • 德文·尼尔

  • Hugues Devimeux

  • 杰森·维拉纽瓦

  • 卡皮尔·萨赫德瓦

  • KingWampy

  • 利奥·托雷斯

  • 莱昂内尔·雷

  • 马克·米勒

  • 穆罕默德·阿尔-费特亚尼

  • 纳文·M·K

  • 奥利弗

  • Ricky Chon

  • vector67

合并的拉取请求

本次发布共合并了64个拉取请求。

亮点

  • #1075: Add OpenGL Renderer

    添加了一个OpenGLRenderer、OpenGLCamera、支持OpenGL的Mobjects,以及一个--use_opengl_renderer标志。当传递此标志时,您可以传递-p标志以预览动画,传递-w标志以生成视频,以及传递-q标志以指定渲染质量。如果您不传递-p-w标志,则不会发生任何事情。使用OpenGL渲染器渲染的场景必须仅使用支持OpenGL的Mobjects。

已弃用的类和函数

  • #1124: Deprecated ShowCreation in favor of Create
    1. 已弃用 ShowCreation,改为在整个库中使用 Create,除了 show_creation 布尔变量 vector_space_scene.py

    2. 在原始的ShowCreation类中添加了一个弃用警告。

  • #1110: Deprecated SmallDot + OpenGLSmallDot

    SmallDot 不是必需的,并且会引发弃用警告。这将在未来的版本中移除。

新功能

  • #1037: Added new fade and transform animations (TransformMatchingShapes, TransformMatchingTex, FadeTransform) from 3b1b/manim

    新增了新的淡出动画:FadeOutToPoint 新增了FadeTransformFadeTransformPieces用于通过淡出变换mobjects和submobjects 新增了TransformMatchingShapesTransformMatchingTex用于变换具有匹配部分的mobjects和tex

  • #1097: 添加了3D Mobject Dot3D

  • #1074: 在配置中添加了jupyter media_width选项

  • #1107: Added Unwrite animation class to complement Write

    添加了Unwrite,它继承自Write。它通过传递反向速率函数自动反转Write的动画,但它还接受一个额外的布尔参数reverse,如果False,则从左到右渲染动画(假设文本按通常方式定向),但如果True,则从右到左渲染。

  • #1085: Added 角度 and RightAngle for intersecting lines

    AngleRightAngle 都接受两条线作为输入。如果它们相交或共享一个共同的顶点,则在它们之间绘制一个角度。用户可以自定义角度的外观,也可以使用虚线直角。

增强功能

  • #1144: 提高了GIF的质量

  • #1157: Refresh triangulation on call to apply_points_function()

    旋转调用了apply_points_function,之前它没有被OpenGLMobject子类化——现在它被子类化了。然后,顶点法线也可以更新。

    此外,旋转后old_points矩阵会发生变化,使得旧点/新点测试变得无关紧要。这通过.copy调用来解决。

  • #1151: 向OpenGLSurface添加了参数函数支持

  • #1139: 代码中的 config[“preview”] 支持

  • #1123: Added caching, skipping, and user-specified background colors to the OpenGL renderer

    OpenGL 播放逻辑已改进,支持使用 -n 参数进行缓存和跳过(现在与 Cairo 播放逻辑类似)。OpenGLSurface 中的一个随机错误已修复,现在可以通过 background_color 参数更改 OpenGL 背景颜色。

  • #1118: Allow passing animation arguments with .animate syntax

    用户现在可以像obj.animate(run_time=2).method(arg)这样操作,如果他们想为单个.animate调用指定动画参数,仍然可以不指定任何参数,如obj.animate.method(arg)

    传递动画参数仅在访问.animate后直接允许,如果在其他地方传递,则会引发ValueError

  • #718: Rotating the numbers in y axis

    在Axes中,y轴将旋转90度,但数字也随之旋转,这是不应该的。修复了这个问题。

  • #1070: Raise FileNotFoundError when unable to locate the .cfg file specified via --config_file

    引发错误将停止脚本执行,并让用户知道–config_file位置存在问题,而不是回退到默认配置。

修复的bug

  • #1224: 修复了 ShowIncreasingSubsets, ShowSubmobjectsOneByOne, 和 AddTextLetterByLetter

  • #1201: 防止在空场景中使用embed()时崩溃

  • #1192: 修复了当动画被缓存时,manim无法合并部分电影文件的问题。

  • #1193: Fixed using Animation without a child Mobject in AnimationGroup

    AnimationGroup 现在可以接受没有子 MobjectAnimation 对象,例如 Wait

  • #1170: 修复了SVG解析中的一些小错误

  • #1159: 添加了对同一SVG元素中多个变换的支持

  • #1156: Fixed DrawBorderThenFill to support OpenGL and improved type hints for some functions

    修复了DrawBorderThenFill中的一个错误,该错误阻止了Write动画与OpenGLVMobjects一起工作,并稍微改进了一些动画函数的类型提示,以包括OpenGLVMobject

  • #1134: Fixed the -a flag.

    -a / --write-all 标志存在问题。使用时,它会导致 Manim 在开始渲染第二个场景后立即崩溃。

  • #1115: Fixed bugs in OpenGLMobject and added ApplyMethod support

    修复了未定义的变量并将Mobject转换为OpenGLMobject。此外,修复了ApplyMethod中的断言语句。

  • #1092: Refactored coordinate_systems.py, fixed bugs, added NumberPlane test

    rotate()的默认行为是围绕Mobject的中心旋转。NumberLine仅在|x_min| == |x_max|时关于数字0的点对称。理想情况下,旋转应与线上的数字0点重合。

    添加了一个回归测试,并额外修复了在#718中引入的一些错误。

  • #1078: Removed stray print statements from __main__.py

    使用rich的打印回溯功能,并修复了在调用manim –version时版本信息打印两次的问题。

  • #1086: Fixed broken line spacing in 文本

    在创建Text Mobjects时,缺少了line_spacing参数;现在已添加。

  • #1083: Corrected the shape of Torus

    Torusminor_radius 不等于 1 时,绘制一个具有椭圆横截面的表面。此 PR 确保横截面始终为圆形。

关于测试系统的更改

  • #1160: 启用OpenGL的CI测试

  • #1100: Rewrote test cases to use sys.executable in the command instead of “python”

    测试会失败,因为capture()没有在正确的环境中生成子shell,所以当调用python时,测试将无法找到必要的包。

  • #1079: 移除了test_version.py中的硬编码值manim

我们的开发基础设施的变化

  • #1213: 更新了TinyTex依赖项

  • #1187: 将CodeCov添加到Github工作流中

  • #1166: CI: 使用 poetry 的缓存目录而不是 pip

  • #1071: Enable pytest-cov based code coverage
    • 将pytest-cov作为Python模块包含在开发者依赖项中

    • 在更新poetry以包含pytest-cov时,manimpango从版本0.2.3升级到0.2.4,并且需要在Ubuntu中安装libpango1.0-dev。

    • 添加到CI工作流(ci.yml)以创建并上传测试覆盖率。

  • #1073: 从 PULL_REQUEST_TEMPLATE.md 中移除了“一行摘要”

代码质量改进和类似的重构

  • #1167: 合并 OpenGLMobjectMobject

  • #1164: 修复了cairo_renderer.py中的单一PEP8风格问题

  • #1140: Flake8 兼容性 & 代码清理

  • #1019: Refactored play()
    • 移除了play()的_**三个**_装饰器,特别是:缓存逻辑和文件写入逻辑现在包含在play()中(以前不可能,因为scene.waitscene.play是两个不同的东西)。

    • 向Wait添加了is_static_wait属性。(<=> 如果等待是一个冻结的帧)。

    • scene.add_static_frame重命名并移动到renderer.freeze_current_frame

    • 现在,当调用没有动画的play时,它会引发ValueError,而不仅仅是一个警告。

    • 通过修改renderer.update_skipping_status修复了#874

    • renderer 使用 scene.begin_animations 开始动画(以前使用 scene.compile_animation_data 来完成此操作)

    • 运行时间和时间进度生成现在在scene.play_internal中完成,尽管让渲染器稍后处理它更有意义。

    • 感谢模拟测试,添加了一堆很酷的测试,同时也感谢新的语法 scene.render