Skip to content

Commit e7a38a9

Browse files
committed
Decouple CairoRenderer from Scene
1 parent 200d83c commit e7a38a9

File tree

5 files changed

+16
-10
lines changed

5 files changed

+16
-10
lines changed

manim/__main__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from .scene.scene import Scene
2020
from .utils.file_ops import open_file as open_media_file
2121
from .grpc.impl import frame_server_impl
22+
from .renderer.cairo_renderer import CairoRenderer
2223

2324

2425
def open_file_if_needed(file_writer):

manim/renderer/cairo_renderer.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from ..constants import DEFAULT_WAIT_TIME
77
from ..scene.scene_file_writer import SceneFileWriter
88
from ..utils.caching import handle_caching_play, handle_caching_wait
9+
from ..camera.camera import Camera
910

1011

1112
def manage_scene_reference(func):
@@ -55,13 +56,14 @@ class CairoRenderer:
5556
time: time elapsed since initialisation of scene.
5657
"""
5758

58-
def __init__(self, camera_class, **kwargs):
59+
def __init__(self, camera_class=None, **kwargs):
5960
# All of the following are set to EITHER the value passed via kwargs,
6061
# OR the value stored in the global config dict at the time of
6162
# _instance construction_. Before, they were in the CONFIG dict, which
6263
# is a class attribute and is defined at the time of _class
6364
# definition_. This did not allow for creating two Cameras with
6465
# different configurations in the same session.
66+
self.file_writer = None
6567
self.video_quality_config = {}
6668
for attr in [
6769
"pixel_height",
@@ -71,17 +73,18 @@ def __init__(self, camera_class, **kwargs):
7173
"frame_rate",
7274
]:
7375
self.video_quality_config[attr] = kwargs.get(attr, config[attr])
74-
self.camera = camera_class(self.video_quality_config, **camera_config)
76+
camera_cls = camera_class if camera_class is not None else Camera
77+
self.camera = camera_cls(self.video_quality_config, **camera_config)
7578
self.original_skipping_status = file_writer_config["skip_animations"]
7679
self.animations_hashes = []
7780
self.num_plays = 0
7881
self.time = 0
7982

80-
def init_file_writer(self, scene_name):
83+
def init(self, scene):
8184
self.file_writer = SceneFileWriter(
8285
self,
8386
self.video_quality_config,
84-
scene_name,
87+
scene.__class__.__name__,
8588
**file_writer_config,
8689
)
8790

manim/scene/scene.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,13 @@ def construct(self):
6363
"random_seed": 0,
6464
}
6565

66-
def __init__(self, **kwargs):
66+
def __init__(self, renderer=None, **kwargs):
6767
Container.__init__(self, **kwargs)
68-
self.renderer = CairoRenderer(self.camera_class)
69-
self.renderer.init_file_writer(self.__class__.__name__)
68+
if renderer is None:
69+
self.renderer = CairoRenderer(camera_class=self.camera_class)
70+
else:
71+
self.renderer = renderer
72+
self.renderer.init(self)
7073

7174
self.mobjects = []
7275
# TODO, remove need for foreground mobjects

tests/test_container.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import pytest
2-
from manim import Container, Mobject, Scene
2+
from manim import Container, Mobject, Scene, CairoRenderer
33

44

55
def test_ABC():

tests/utils/GraphicalUnitTester.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import warnings
88
from platform import system
99

10-
from manim import config, file_writer_config
10+
from manim import config, file_writer_config, CairoRenderer
1111

1212

1313
class GraphicalUnitTester:
@@ -75,7 +75,6 @@ def __init__(
7575
]:
7676
os.makedirs(dir_temp)
7777

78-
# By invoking this, the scene is rendered.
7978
self.scene = scene_object()
8079
self.scene.render()
8180

0 commit comments

Comments
 (0)