Skip to content

Commit 57cd448

Browse files
Update SceneBuffer to be less private and add docstring
1 parent 666b03d commit 57cd448

File tree

1 file changed

+35
-26
lines changed

1 file changed

+35
-26
lines changed

manim/animation/scene_buffer.py

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,61 @@
1-
from manim.mobject.opengl.opengl_mobject import OpenGLMobject as Mobject
1+
from typing import TYPE_CHECKING, final, Sequence
22

3-
from typing import final, Sequence
3+
if TYPE_CHECKING:
4+
from manim.mobject.opengl.opengl_mobject import OpenGLMobject as Mobject
45

56

67
__all__ = ["SceneBuffer"]
78

89

910
@final
1011
class SceneBuffer:
12+
"""
13+
A "buffer" between :class:`.Scene` and :class:`.Animation`
14+
15+
Operations an animation wants to do on :class:`.Scene` should be
16+
done here (eg. :meth:`.Scene.add`, :meth:`.Scene.remove`). The
17+
scene will then apply these changes at specific points (namely
18+
at the beginning and end of animations)
19+
20+
It is the scenes job to clear the buffer in between the beginning
21+
and end of animations.
22+
"""
23+
1124
def __init__(self) -> None:
12-
self.__to_remove: list[Mobject] = []
13-
self.__to_add: list[Mobject] = []
25+
self.to_remove: list[Mobject] = []
26+
self.to_add: list[Mobject] = []
27+
self.deferred = False
1428

1529
def add(self, *mobs: Mobject) -> None:
1630
check_args(mobs)
17-
self.__to_add.extend(mobs)
31+
self._check_deferred()
32+
self.to_add.extend(mobs)
1833

1934
def remove(self, *mobs: Mobject) -> None:
2035
check_args(mobs)
21-
self.__to_remove.extend(mobs)
36+
self._check_deferred()
37+
self.to_remove.extend(mobs)
2238

2339
def clear(self) -> None:
24-
self.__to_remove.clear()
25-
self.__to_add.clear()
26-
27-
@property
28-
def to_remove(self) -> tuple[Mobject, ...]:
29-
return tuple(self.__to_remove)
40+
self.to_remove.clear()
41+
self.to_add.clear()
3042

31-
@to_remove.setter
32-
def remove_mobject(self, mobs: Sequence[Mobject]) -> None:
33-
check_args(mobs)
34-
self.__to_remove = list(mobs)
35-
36-
@property
37-
def to_add(self) -> tuple[Mobject, ...]:
38-
return tuple(self.__to_add)
43+
def deferred_clear(self) -> None:
44+
"""Clear ``self`` on next operation"""
45+
self.deferred = True
3946

40-
@to_add.setter
41-
def add_mobject(self, mobs: Sequence[Mobject]) -> None:
42-
check_args(mobs)
43-
self.__to_add = list(mobs)
47+
def _check_deferred(self) -> None:
48+
if self.deferred:
49+
self.clear()
50+
self.deferred = False
4451

4552
def __str__(self) -> str:
46-
to_add = self.__to_add
47-
to_remove = self.__to_remove
53+
to_add = self.to_add
54+
to_remove = self.to_remove
4855
return f"{type(self).__name__}({to_add=}, {to_remove=})"
4956

57+
__repr__ = __str__
58+
5059

5160
def check_args(mobs: Sequence[Mobject]) -> None:
5261
if not (

0 commit comments

Comments
 (0)