mirror of
https://github.com/3b1b/manim.git
synced 2025-08-05 16:49:03 +00:00
Merge branch '3b1b:master' into shaders
This commit is contained in:
commit
baa2adc128
8 changed files with 72 additions and 22 deletions
|
@ -1,4 +1,39 @@
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
No changes now.
|
Unreleased
|
||||||
|
----------
|
||||||
|
|
||||||
|
Fixed bugs
|
||||||
|
^^^^^^^^^^
|
||||||
|
|
||||||
|
- Fixed the bug of :func:`~manimlib.utils.iterables.resize_with_interpolation` in the case of ``length=0``
|
||||||
|
- Fixed the bug of ``__init__`` in :class:`~manimlib.mobject.geometry.Elbow`
|
||||||
|
- If chosen monitor is not available, choose one that does exist
|
||||||
|
- Make sure mobject data gets unlocked after animations
|
||||||
|
- Fixed a bug for off-center vector fields
|
||||||
|
- Had ``Mobject.match_points`` return self
|
||||||
|
- Fixed chaining animation in example scenes
|
||||||
|
|
||||||
|
New Features
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- Added :class:`~manimlib.animation.indication.VShowPassingFlash`
|
||||||
|
- Added ``COLORMAP_3B1B``
|
||||||
|
- Added some methods to coordinate system to access all axes ranges
|
||||||
|
|
||||||
|
- :meth:`~manimlib.mobject.coordinate_systems.CoordinateSystem.get_origin`
|
||||||
|
- :meth:`~manimlib.mobject.coordinate_systems.CoordinateSystem.get_all_ranges`
|
||||||
|
- Added :meth:`~manimlib.mobject.mobject.Mobject.set_color_by_rgba_func`
|
||||||
|
- Updated :class:`~manimlib.mobject.vector_field.VectorField` and :class:`~manimlib.mobject.vector_field.StreamLines`
|
||||||
|
- Allow ``3b1b_colormap`` as an option for :func:`~manimlib.utils.color.get_colormap_list`
|
||||||
|
- Return ``stroke_width`` as 1d array
|
||||||
|
- Added :meth:`~manimlib.mobject.svg.text_mobject.Text.get_parts_by_text`
|
||||||
|
- Use Text not TexText for Brace
|
||||||
|
- Update to Cross to make it default to variable stroke width
|
||||||
|
- Added :class:`~manimlib.animation.indication.FlashAround` and :class:`~manimlib.animation.indication.FlashUnder`
|
||||||
|
- Allowed configuration in ``Brace.get_text``
|
||||||
|
- Added :meth:`~manimlib.camera.camera.CameraFrame.reorient` for quicker changes to frame angle
|
||||||
|
- Added ``units`` to :meth:`~manimlib.camera.camera.CameraFrame.set_euler_angles`
|
||||||
|
- Allowed any ``VMobject`` to be passed into ``TransformMatchingTex``
|
||||||
|
- Removed double brace convention in ``Tex`` and ``TexText``
|
|
@ -56,7 +56,7 @@ custom_config
|
||||||
|
|
||||||
- ``raster_images``
|
- ``raster_images``
|
||||||
The directory for storing raster images to be used in the code (including
|
The directory for storing raster images to be used in the code (including
|
||||||
``.jpg``, ``.png`` and ``.gif``), which will be read by ``ImageMobject``.
|
``.jpg``, ``.jpeg``, ``.png`` and ``.gif``), which will be read by ``ImageMobject``.
|
||||||
|
|
||||||
- ``vector_images``
|
- ``vector_images``
|
||||||
The directory for storing vector images to be used in the code (including
|
The directory for storing vector images to be used in the code (including
|
||||||
|
@ -108,6 +108,11 @@ The relative position of the playback window on the display (two characters,
|
||||||
the first character means upper(U) / middle(O) / lower(D), the second character
|
the first character means upper(U) / middle(O) / lower(D), the second character
|
||||||
means left(L) / middle(O) / right(R)).
|
means left(L) / middle(O) / right(R)).
|
||||||
|
|
||||||
|
``window_monitor``
|
||||||
|
------------------
|
||||||
|
|
||||||
|
The number of the monitor you want the preview window to pop up on. (default is 0)
|
||||||
|
|
||||||
``break_into_partial_movies``
|
``break_into_partial_movies``
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
|
|
@ -85,5 +85,5 @@ following the directory structure:
|
||||||
└── custom_config.yml
|
└── custom_config.yml
|
||||||
|
|
||||||
When you enter the ``project/`` folder and run ``manimgl code.py <Scene>``,
|
When you enter the ``project/`` folder and run ``manimgl code.py <Scene>``,
|
||||||
it will overwrite ``manim/custom_config.yml`` with ``custom_config.yml``
|
it will overwrite ``manim/default_config.yml`` with ``custom_config.yml``
|
||||||
in the ``project`` folder.
|
in the ``project`` folder.
|
|
@ -8,12 +8,12 @@ the simplest and one by one.
|
||||||
InteractiveDevlopment
|
InteractiveDevlopment
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
.. manim-example:: InteractiveDevlopment
|
.. manim-example:: InteractiveDevelopment
|
||||||
:media: ../_static/example_scenes/InteractiveDevlopment.mp4
|
:media: ../_static/example_scenes/InteractiveDevelopment.mp4
|
||||||
|
|
||||||
from manimlib import *
|
from manimlib import *
|
||||||
|
|
||||||
class InteractiveDevlopment(Scene):
|
class InteractiveDevelopment(Scene):
|
||||||
def construct(self):
|
def construct(self):
|
||||||
circle = Circle()
|
circle = Circle()
|
||||||
circle.set_fill(BLUE, opacity=0.5)
|
circle.set_fill(BLUE, opacity=0.5)
|
||||||
|
@ -128,6 +128,8 @@ TextExample
|
||||||
|
|
||||||
class TextExample(Scene):
|
class TextExample(Scene):
|
||||||
def construct(self):
|
def construct(self):
|
||||||
|
# To run this scene properly, you should have "Consolas" font in your computer
|
||||||
|
# for full usage, you can see https://github.com/3b1b/manim/pull/680
|
||||||
text = Text("Here is a text", font="Consolas", font_size=90)
|
text = Text("Here is a text", font="Consolas", font_size=90)
|
||||||
difference = Text(
|
difference = Text(
|
||||||
"""
|
"""
|
||||||
|
@ -135,6 +137,7 @@ TextExample
|
||||||
you can change the font more easily, but can't use the LaTeX grammar
|
you can change the font more easily, but can't use the LaTeX grammar
|
||||||
""",
|
""",
|
||||||
font="Arial", font_size=24,
|
font="Arial", font_size=24,
|
||||||
|
# t2c is a dict that you can choose color for different text
|
||||||
t2c={"Text": BLUE, "TexText": BLUE, "LaTeX": ORANGE}
|
t2c={"Text": BLUE, "TexText": BLUE, "LaTeX": ORANGE}
|
||||||
)
|
)
|
||||||
VGroup(text, difference).arrange(DOWN, buff=1)
|
VGroup(text, difference).arrange(DOWN, buff=1)
|
||||||
|
@ -148,6 +151,7 @@ TextExample
|
||||||
t2f={"font": "Consolas", "words": "Consolas"},
|
t2f={"font": "Consolas", "words": "Consolas"},
|
||||||
t2c={"font": BLUE, "words": GREEN}
|
t2c={"font": BLUE, "words": GREEN}
|
||||||
)
|
)
|
||||||
|
fonts.set_width(FRAME_WIDTH - 1)
|
||||||
slant = Text(
|
slant = Text(
|
||||||
"And the same as slant and weight",
|
"And the same as slant and weight",
|
||||||
font="Consolas",
|
font="Consolas",
|
||||||
|
@ -180,20 +184,24 @@ TexTransformExample
|
||||||
def construct(self):
|
def construct(self):
|
||||||
to_isolate = ["B", "C", "=", "(", ")"]
|
to_isolate = ["B", "C", "=", "(", ")"]
|
||||||
lines = VGroup(
|
lines = VGroup(
|
||||||
# Surrounding substrings with double braces
|
# Passing in muliple arguments to Tex will result
|
||||||
# will ensure that those parts are separated
|
# in the same expression as if those arguments had
|
||||||
# out in the Tex. For example, here the
|
# been joined together, except that the submobject
|
||||||
# Tex will have 5 submobjects, corresponding
|
# heirarchy of the resulting mobject ensure that the
|
||||||
# to the strings [A^2, +, B^2, =, C^2]
|
# Tex mobject has a subject corresponding to
|
||||||
Tex("{{A^2}} + {{B^2}} = {{C^2}}"),
|
# each of these strings. For example, the Tex mobject
|
||||||
Tex("{{A^2}} = {{C^2}} - {{B^2}}"),
|
# below will have 5 subjects, corresponding to the
|
||||||
|
# expressions [A^2, +, B^2, =, C^2]
|
||||||
|
Tex("A^2", "+", "B^2", "=", "C^2"),
|
||||||
|
# Likewise here
|
||||||
|
Tex("A^2", "=", "C^2", "-", "B^2"),
|
||||||
# Alternatively, you can pass in the keyword argument
|
# Alternatively, you can pass in the keyword argument
|
||||||
# "isolate" with a list of strings that should be out as
|
# "isolate" with a list of strings that should be out as
|
||||||
# their own submobject. So both lines below are equivalent
|
# their own submobject. So the line below is equivalent
|
||||||
# to what you'd get by wrapping every instance of "B", "C"
|
# to the commented out line below it.
|
||||||
# "=", "(" and ")" with double braces
|
Tex("A^2 = (C + B)(C - B)", isolate=["A^2", *to_isolate]),
|
||||||
Tex("{{A^2}} = (C + B)(C - B)", isolate=to_isolate),
|
# Tex("A^2", "=", "(", "C", "+", "B", ")", "(", "C", "-", "B", ")"),
|
||||||
Tex("A = \\sqrt{(C + B)(C - B)}", isolate=to_isolate)
|
Tex("A = \\sqrt{(C + B)(C - B)}", isolate=["A", *to_isolate])
|
||||||
)
|
)
|
||||||
lines.arrange(DOWN, buff=LARGE_BUFF)
|
lines.arrange(DOWN, buff=LARGE_BUFF)
|
||||||
for line in lines:
|
for line in lines:
|
||||||
|
@ -252,7 +260,7 @@ TexTransformExample
|
||||||
# new_line2 and the "\sqrt" from the final line. By passing in,
|
# new_line2 and the "\sqrt" from the final line. By passing in,
|
||||||
# transform_mismatches=True, it will transform this "^2" part into
|
# transform_mismatches=True, it will transform this "^2" part into
|
||||||
# the "\sqrt" part.
|
# the "\sqrt" part.
|
||||||
new_line2 = Tex("{{A}}^2 = (C + B)(C - B)", isolate=to_isolate)
|
new_line2 = Tex("A^2 = (C + B)(C - B)", isolate=["A", *to_isolate])
|
||||||
new_line2.replace(lines[2])
|
new_line2.replace(lines[2])
|
||||||
new_line2.match_style(lines[2])
|
new_line2.match_style(lines[2])
|
||||||
|
|
||||||
|
@ -343,7 +351,7 @@ UpdatersExample
|
||||||
)
|
)
|
||||||
self.wait()
|
self.wait()
|
||||||
self.play(
|
self.play(
|
||||||
square.set_width(5, stretch=True),
|
square.animate.set_width(5, stretch=True),
|
||||||
run_time=3,
|
run_time=3,
|
||||||
)
|
)
|
||||||
self.wait()
|
self.wait()
|
||||||
|
@ -387,7 +395,7 @@ CoordinateSystemExample
|
||||||
axes = Axes(
|
axes = Axes(
|
||||||
# x-axis ranges from -1 to 10, with a default step size of 1
|
# x-axis ranges from -1 to 10, with a default step size of 1
|
||||||
x_range=(-1, 10),
|
x_range=(-1, 10),
|
||||||
# y-axis ranges from -2 to 10 with a step size of 0.5
|
# y-axis ranges from -2 to 2 with a step size of 0.5
|
||||||
y_range=(-2, 2, 0.5),
|
y_range=(-2, 2, 0.5),
|
||||||
# The axes will be stretched so as to match the specified
|
# The axes will be stretched so as to match the specified
|
||||||
# height and width
|
# height and width
|
||||||
|
|
|
@ -99,6 +99,7 @@ Below is the directory structure of manim:
|
||||||
├── config_ops.py # Process CONFIG
|
├── config_ops.py # Process CONFIG
|
||||||
├── customization.py # Read from custom_config.yml
|
├── customization.py # Read from custom_config.yml
|
||||||
├── debug.py # Utilities for debugging in program
|
├── debug.py # Utilities for debugging in program
|
||||||
|
├── directories.py # Read directories from config file
|
||||||
├── family_ops.py # Process family members
|
├── family_ops.py # Process family members
|
||||||
├── file_ops.py # Process files and directories
|
├── file_ops.py # Process files and directories
|
||||||
├── images.py # Read image
|
├── images.py # Read image
|
||||||
|
|
|
@ -342,7 +342,7 @@ class CoordinateSystemExample(Scene):
|
||||||
axes = Axes(
|
axes = Axes(
|
||||||
# x-axis ranges from -1 to 10, with a default step size of 1
|
# x-axis ranges from -1 to 10, with a default step size of 1
|
||||||
x_range=(-1, 10),
|
x_range=(-1, 10),
|
||||||
# y-axis ranges from -2 to 10 with a step size of 0.5
|
# y-axis ranges from -2 to 2 with a step size of 0.5
|
||||||
y_range=(-2, 2, 0.5),
|
y_range=(-2, 2, 0.5),
|
||||||
# The axes will be stretched so as to match the specified
|
# The axes will be stretched so as to match the specified
|
||||||
# height and width
|
# height and width
|
||||||
|
|
|
@ -23,6 +23,7 @@ def init_customization():
|
||||||
"background_color": "",
|
"background_color": "",
|
||||||
},
|
},
|
||||||
"window_position": "UR",
|
"window_position": "UR",
|
||||||
|
"window_position": 0,
|
||||||
"break_into_partial_movies": False,
|
"break_into_partial_movies": False,
|
||||||
"camera_qualities": {
|
"camera_qualities": {
|
||||||
"low": {
|
"low": {
|
||||||
|
|
Loading…
Add table
Reference in a new issue