23
23
from ..scene .scene_file_writer import SceneFileWriter
24
24
from ..utils .iterables import list_update
25
25
from ..utils .hashing import get_hash_from_play_call , get_hash_from_wait_call
26
+ from ..renderer .cairo_renderer import CairoRenderer
26
27
27
28
28
29
class Scene (Container ):
@@ -65,11 +66,11 @@ def construct(self):
65
66
def __init__ (self , ** kwargs ):
66
67
Container .__init__ (self , ** kwargs )
67
68
self .camera = self .camera_class (** camera_config )
68
- if not self .camera . use_js_renderer :
69
- self . file_writer = SceneFileWriter (
70
- self ,
71
- ** file_writer_config ,
72
- )
69
+ self .file_writer = SceneFileWriter (
70
+ self ,
71
+ ** file_writer_config ,
72
+ )
73
+ self . renderer = CairoRenderer ( self , self . camera , self . file_writer )
73
74
self .play_hashes_list = []
74
75
75
76
self .mobjects = []
@@ -167,18 +168,6 @@ def get_attrs(self, *keys):
167
168
"""
168
169
return [getattr (self , key ) for key in keys ]
169
170
170
- def get_frame (self ):
171
- """
172
- Gets the current frame as NumPy array.
173
-
174
- Returns
175
- -------
176
- np.array
177
- NumPy array of pixel values of each pixel in screen.
178
- The shape of the array is height x width x 3
179
- """
180
- return np .array (self .camera .pixel_array )
181
-
182
171
def update_frame ( # TODO Description in Docstring
183
172
self ,
184
173
mobjects = None ,
@@ -221,7 +210,7 @@ def update_frame( # TODO Description in Docstring
221
210
222
211
def freeze_background (self ):
223
212
self .update_frame ()
224
- self .camera = Camera (self .get_frame ())
213
+ self .camera = Camera (self .renderer . get_frame ())
225
214
self .clear ()
226
215
227
216
###
@@ -823,7 +812,7 @@ def progress_through_animations(self):
823
812
for t in self .get_animation_time_progression (self .animations ):
824
813
self .update_animation_to_time (t )
825
814
self .update_frame (self .moving_mobjects , self .static_image )
826
- self .add_frame (self .get_frame ())
815
+ self .add_frame (self .renderer . get_frame ())
827
816
828
817
def update_animation_to_time (self , t ):
829
818
"""
@@ -931,7 +920,7 @@ def play_internal(self, *args, **kwargs):
931
920
# have to be rendered every frame
932
921
self .moving_mobjects = self .get_moving_mobjects (* self .animations )
933
922
self .update_frame (excluded_mobjects = self .moving_mobjects )
934
- self .static_image = self .get_frame ()
923
+ self .static_image = self .renderer . get_frame ()
935
924
self .last_t = 0
936
925
self .run_time = self .get_run_time (self .animations )
937
926
@@ -953,7 +942,7 @@ def wait_internal(self, duration=DEFAULT_WAIT_TIME, stop_condition=None):
953
942
for t in time_progression :
954
943
self .update_animation_to_time (t )
955
944
self .update_frame ()
956
- self .add_frame (self .get_frame ())
945
+ self .add_frame (self .renderer . get_frame ())
957
946
if stop_condition is not None and stop_condition ():
958
947
time_progression .close ()
959
948
break
@@ -963,7 +952,7 @@ def wait_internal(self, duration=DEFAULT_WAIT_TIME, stop_condition=None):
963
952
else :
964
953
self .update_frame ()
965
954
dt = 1 / self .camera .frame_rate
966
- self .add_frame (self .get_frame (), num_frames = int (duration / dt ))
955
+ self .add_frame (self .renderer . get_frame (), num_frames = int (duration / dt ))
967
956
return self
968
957
969
958
def clean_up_animations (self , * animations ):
0 commit comments