From 4c6301ec4a45f332e7ba3ecc28306316d2ab3490 Mon Sep 17 00:00:00 2001 From: leotrs Date: Mon, 31 Aug 2020 07:15:51 -0400 Subject: [PATCH 1/5] remove set/get and replace with properties that override the Camera properties --- manim/camera/moving_camera.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/manim/camera/moving_camera.py b/manim/camera/moving_camera.py index 53bdadaa93..167602fb80 100644 --- a/manim/camera/moving_camera.py +++ b/manim/camera/moving_camera.py @@ -47,7 +47,8 @@ def __init__(self, frame=None, **kwargs): Camera.__init__(self, **kwargs) # TODO, make these work for a rotated frame - def get_frame_height(self): + @property + def frame_height(self): """Returns the height of the frame. Returns @@ -57,7 +58,8 @@ def get_frame_height(self): """ return self.frame.get_height() - def get_frame_width(self): + @property + def frame_width(self): """Returns the width of the frame Returns @@ -67,7 +69,8 @@ def get_frame_width(self): """ return self.frame.get_width() - def get_frame_center(self): + @property + def frame_center(self): """Returns the centerpoint of the frame in cartesian coordinates. Returns @@ -77,7 +80,8 @@ def get_frame_center(self): """ return self.frame.get_center() - def set_frame_height(self, frame_height): + @frame_height.setter + def frame_height(self, frame_height): """Sets the height of the frame in MUnits. Parameters @@ -87,6 +91,7 @@ def set_frame_height(self, frame_height): """ self.frame.stretch_to_fit_height(frame_height) + @frame_width.setter def set_frame_width(self, frame_width): """Sets the width of the frame in MUnits. @@ -97,6 +102,7 @@ def set_frame_width(self, frame_width): """ self.frame.stretch_to_fit_width(frame_width) + @frame_center.setter def set_frame_center(self, frame_center): """Sets the centerpoint of the frame. From 3c0dcc4295be78011bc2790be6710e5d0bcbc05f Mon Sep 17 00:00:00 2001 From: leotrs Date: Mon, 31 Aug 2020 07:22:09 -0400 Subject: [PATCH 2/5] fix typo --- manim/camera/moving_camera.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manim/camera/moving_camera.py b/manim/camera/moving_camera.py index 167602fb80..01e3f2db06 100644 --- a/manim/camera/moving_camera.py +++ b/manim/camera/moving_camera.py @@ -92,7 +92,7 @@ def frame_height(self, frame_height): self.frame.stretch_to_fit_height(frame_height) @frame_width.setter - def set_frame_width(self, frame_width): + def frame_width(self, frame_width): """Sets the width of the frame in MUnits. Parameters @@ -103,7 +103,7 @@ def set_frame_width(self, frame_width): self.frame.stretch_to_fit_width(frame_width) @frame_center.setter - def set_frame_center(self, frame_center): + def frame_center(self, frame_center): """Sets the centerpoint of the frame. Parameters From cf4f282069f7ec1d1f1da2d09ee26645b232ff57 Mon Sep 17 00:00:00 2001 From: Aathish Sivasubrahmanian Date: Mon, 31 Aug 2020 17:47:01 +0530 Subject: [PATCH 3/5] Make save_state always use copy() --- manim/mobject/mobject.py | 8 +++----- manim/scene/zoomed_scene.py | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 66f4292637..661f032fd9 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -696,14 +696,12 @@ def get_color(self): ## - def save_state(self, use_deepcopy=False): + def save_state(self): if hasattr(self, "saved_state"): # Prevent exponential growth of data self.saved_state = None - if use_deepcopy: - self.saved_state = self.deepcopy() - else: - self.saved_state = self.copy() + self.saved_state = self.copy() + return self def restore(self): diff --git a/manim/scene/zoomed_scene.py b/manim/scene/zoomed_scene.py index 27205c8c14..d63ea6e709 100644 --- a/manim/scene/zoomed_scene.py +++ b/manim/scene/zoomed_scene.py @@ -125,7 +125,7 @@ def get_zoomed_display_pop_out_animation(self, **kwargs): The Animation of the Zoomed Display popping out. """ display = self.zoomed_display - display.save_state(use_deepcopy=True) + display.save_state() display.replace(self.zoomed_camera.frame, stretch=True) return ApplyMethod(display.restore) From 8fa3ab986925d98bb19b2d36f4171285befb15a0 Mon Sep 17 00:00:00 2001 From: Aathish Sivasubrahmanian Date: Mon, 31 Aug 2020 17:48:46 +0530 Subject: [PATCH 4/5] Use camera.pixel_array instead of camera.get_pixel_array. --- manim/mobject/types/image_mobject.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index 25badc2578..14b28b83cc 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -117,10 +117,13 @@ class ImageMobjectFromCamera(AbstractImageMobject): def __init__(self, camera, **kwargs): self.camera = camera + self.pixel_array = self.camera.pixel_array AbstractImageMobject.__init__(self, **kwargs) + # TODO: Get rid of this. def get_pixel_array(self): - return self.camera.get_pixel_array() + self.pixel_array = self.camera.pixel_array + return self.pixel_array def add_display_frame(self, **kwargs): config = dict(self.default_display_frame_config) @@ -128,3 +131,9 @@ def add_display_frame(self, **kwargs): self.display_frame = SurroundingRectangle(self, **config) self.add(self.display_frame) return self + + def interpolate_color(self, mobject1, mobject2, alpha): + assert mobject1.pixel_array.shape == mobject2.pixel_array.shape + self.pixel_array = interpolate( + mobject1.pixel_array, mobject2.pixel_array, alpha + ).astype(self.pixel_array_dtype) From c068c63623790745a9d0347a787a9f2d543b0a85 Mon Sep 17 00:00:00 2001 From: Aathish Sivasubrahmanian Date: Fri, 4 Sep 2020 20:18:32 +0530 Subject: [PATCH 5/5] More descriptive AssertionError for incompatible pixel array shapes. --- manim/mobject/types/image_mobject.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index 14b28b83cc..9524767720 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -33,7 +33,13 @@ def set_color(self): def reset_points(self): # Corresponding corners of image are fixed to these 3 points - self.points = np.array([UP + LEFT, UP + RIGHT, DOWN + LEFT,]) + self.points = np.array( + [ + UP + LEFT, + UP + RIGHT, + DOWN + LEFT, + ] + ) self.center() h, w = self.get_pixel_array().shape[:2] self.stretch_to_fit_height(self.height) @@ -95,7 +101,11 @@ def fade(self, darkness=0.5, family=True): return self def interpolate_color(self, mobject1, mobject2, alpha): - assert mobject1.pixel_array.shape == mobject2.pixel_array.shape + assert mobject1.pixel_array.shape == mobject2.pixel_array.shape, ( + f"Mobject pixel array shapes incompatible for interpolation.\n" + f"Mobject 1 ({mobject1}) : {mobject1.pixel_array.shape}\n" + f"Mobject 2 ({mobject2}) : {mobject1.pixel_array.shape}" + ) self.pixel_array = interpolate( mobject1.pixel_array, mobject2.pixel_array, alpha ).astype(self.pixel_array_dtype) @@ -133,7 +143,11 @@ def add_display_frame(self, **kwargs): return self def interpolate_color(self, mobject1, mobject2, alpha): - assert mobject1.pixel_array.shape == mobject2.pixel_array.shape + assert mobject1.pixel_array.shape == mobject2.pixel_array.shape, ( + f"Mobject pixel array shapes incompatible for interpolation.\n" + f"Mobject 1 ({mobject1}) : {mobject1.pixel_array.shape}\n" + f"Mobject 2 ({mobject2}) : {mobject1.pixel_array.shape}" + ) self.pixel_array = interpolate( mobject1.pixel_array, mobject2.pixel_array, alpha ).astype(self.pixel_array_dtype)