v0.5.0

日期:

2021年4月2日

贡献者

共有35人对本次发布做出了贡献。名字旁带有“+”的人是首次贡献补丁。

  • Abel Aebker +

  • Abhijith Muthyala

  • AntonBallmaier +

  • Aron

  • Benjamin Hackl

  • Bogdan Stăncescu +

  • Darylgolden

  • Devin Neal

  • GameDungeon +

  • Hugues Devimeux

  • Jason Villanueva

  • Kapil Sachdeva

  • KingWampy

  • Lionel Ray +

  • Mark Miller

  • Mohammad Al-Fetyani +

  • Naveen M K

  • Niklas Dewally +

  • Oliver +

  • Roopesh +

  • Seb Pearce +

  • aebkea +

  • friedkeenan

  • hydrobeam +

  • kolibril13

  • sparshg

  • tfglynn +

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

  • Abel Aebker

  • Abhijith Muthyala

  • Benjamin Hackl

  • Bogdan Stăncescu

  • Devin Neal

  • Hugues Devimeux

  • Jason Villanueva

  • Kapil Sachdeva

  • KingWampy

  • Leo Torres

  • Lionel Ray

  • Mark Miller

  • Mohammad Al-Fetyani

  • Naveen M K

  • Oliver

  • Ricky Chon

  • vector67

合并的拉取请求

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

亮点

  • #1075: 添加OpenGL渲染器

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

已废弃的类和函数

  • #1124: 弃用ShowCreation,转而使用Create
    1. 在整个库中弃用ShowCreation,转而使用Create,除了vector_space_scene.py中的show_creation布尔变量。

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

  • #1110: 弃用SmallDot + OpenGLSmallDot

    SmallDot不再必要,将发出弃用警告。这将在未来的版本中移除。

新功能

  • #1037: 从3b1b/manim添加了新的淡入淡出和变换动画(TransformMatchingShapesTransformMatchingTexFadeTransform

    添加了新的淡入淡出动画:FadeOutToPoint。添加了FadeTransformFadeTransformPieces,用于对mobjects和submobjects进行淡入淡出变换。添加了TransformMatchingShapesTransformMatchingTex,用于对具有匹配部分的mobjects和tex进行变换。

  • #1097: 添加了3D Mobject Dot3D

  • #1074: 将jupyter media_width选项添加到配置中

  • #1107: 添加了Unwrite动画类以补充Write

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

  • #1085: 为相交线添加了AngleRightAngle

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

改进

  • #1144: 提高了GIF的质量

  • #1157: 在调用apply_points_function()时刷新三角剖分

    Rotate调用了apply_points_function,该函数以前未被OpenGLMobject子类化——现在已经子类化了。然后,顶点法线也可以更新。

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

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

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

  • #1123: 为OpenGL渲染器添加了缓存、跳过和用户指定的背景颜色

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

  • #1118: 允许使用.animate语法传递动画参数

    用户现在可以执行诸如obj.animate(run_time=2).method(arg)的操作,如果他们想为单个.animate调用指定动画参数,并且仍然可以不指定任何参数,例如obj.animate.method(arg)

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

  • #718: 旋转y轴上的数字

    在Axes中,y轴会旋转90度,但数字也会旋转,而它们不应该旋转。解决了这个问题。

  • #1070: 无法找到通过--config_file指定的.cfg文件时,引发FileNotFoundError

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

修复的错误

  • #1224: 修复了ShowIncreasingSubsetsShowSubmobjectsOneByOneAddTextLetterByLetter

  • #1201: 防止空场景在embed()上崩溃

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

  • #1193: 修复了在AnimationGroup中使用不带子MobjectAnimation的问题

    AnimationGroup现在可以接受不带子MobjectAnimation对象,例如Wait

  • #1170: 修复了次要的SVG解析错误

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

  • #1156: 修复了DrawBorderThenFill以支持OpenGL并改进了某些函数的类型提示

    修复了DrawBorderThenFill中的一个错误,该错误导致Write动画无法与OpenGLVMobjects一起使用,并略微改进了某些动画函数的类型提示,以包括OpenGLVMobject

  • #1134: 修复了-a标志。

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

  • #1115: 修复了OpenGLMobject中的错误并添加了ApplyMethod支持

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

  • #1092: 重构了coordinate_systems.py,修复了错误,添加了NumberPlane测试

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

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

  • #1078: 删除了__main__.py中多余的打印语句

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

  • #1086: 修复了Text中行间距损坏的问题

    在创建Text Mobjects时缺少line_spacing kwarg;此更改添加了它。

  • #1083: 修正了Torus的形状

    minor_radius与1不同时,Torus会绘制一个具有椭圆形横截面的曲面。此PR确保横截面始终是圆形。

测试系统相关更改

  • #1160: 启用OpenGL的CI测试

  • #1100: 重写了测试用例,在命令中使用sys.executable而不是“python”

    测试会因为capture()未能 spawn 一个子shell到正确的环境中而失败,因此当调用python时,测试将无法找到必要的包。

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

开发基础设施更改

  • #1213: 更新了TinyTex依赖项

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

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

  • #1071: 启用基于pytest-cov的代码覆盖率
    • 将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: 重构了play()
    • 删除了play()的_**三个**_装饰器,特别是:缓存逻辑和文件写入器逻辑现在包含在play()中(以前不可能,因为scene.waitscene.play是两个不同的东西)。

    • 为Wait添加了is_static_wait属性。(<=>如果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中完成,尽管renderer稍后处理它可能更有意义。

    • 由于mocks和新语法scene.render,添加了一堆很酷的测试