Skip to content

Commit ba004b8

Browse files
leotrsAathish04
andauthored
Fix MovingCamera and ZoomedScene (#388)
* remove set/get and replace with properties that override the Camera properties * fix typo * Make save_state always use copy() * Use camera.pixel_array instead of camera.get_pixel_array. * More descriptive AssertionError for incompatible pixel array shapes. Co-authored-by: Aathish Sivasubrahmanian <[email protected]>
1 parent bc7ca90 commit ba004b8

File tree

4 files changed

+35
-14
lines changed

4 files changed

+35
-14
lines changed

manim/camera/moving_camera.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ def __init__(self, frame=None, **kwargs):
4848
Camera.__init__(self, **kwargs)
4949

5050
# TODO, make these work for a rotated frame
51-
def get_frame_height(self):
51+
@property
52+
def frame_height(self):
5253
"""Returns the height of the frame.
5354
5455
Returns
@@ -58,7 +59,8 @@ def get_frame_height(self):
5859
"""
5960
return self.frame.get_height()
6061

61-
def get_frame_width(self):
62+
@property
63+
def frame_width(self):
6264
"""Returns the width of the frame
6365
6466
Returns
@@ -68,7 +70,8 @@ def get_frame_width(self):
6870
"""
6971
return self.frame.get_width()
7072

71-
def get_frame_center(self):
73+
@property
74+
def frame_center(self):
7275
"""Returns the centerpoint of the frame in cartesian coordinates.
7376
7477
Returns
@@ -78,7 +81,8 @@ def get_frame_center(self):
7881
"""
7982
return self.frame.get_center()
8083

81-
def set_frame_height(self, frame_height):
84+
@frame_height.setter
85+
def frame_height(self, frame_height):
8286
"""Sets the height of the frame in MUnits.
8387
8488
Parameters
@@ -88,7 +92,8 @@ def set_frame_height(self, frame_height):
8892
"""
8993
self.frame.stretch_to_fit_height(frame_height)
9094

91-
def set_frame_width(self, frame_width):
95+
@frame_width.setter
96+
def frame_width(self, frame_width):
9297
"""Sets the width of the frame in MUnits.
9398
9499
Parameters
@@ -98,7 +103,8 @@ def set_frame_width(self, frame_width):
98103
"""
99104
self.frame.stretch_to_fit_width(frame_width)
100105

101-
def set_frame_center(self, frame_center):
106+
@frame_center.setter
107+
def frame_center(self, frame_center):
102108
"""Sets the centerpoint of the frame.
103109
104110
Parameters

manim/mobject/mobject.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -718,14 +718,12 @@ def get_color(self):
718718

719719
##
720720

721-
def save_state(self, use_deepcopy=False):
721+
def save_state(self):
722722
if hasattr(self, "saved_state"):
723723
# Prevent exponential growth of data
724724
self.saved_state = None
725-
if use_deepcopy:
726-
self.saved_state = self.deepcopy()
727-
else:
728-
self.saved_state = self.copy()
725+
self.saved_state = self.copy()
726+
729727
return self
730728

731729
def restore(self):

manim/mobject/types/image_mobject.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,11 @@ def fade(self, darkness=0.5, family=True):
101101
return self
102102

103103
def interpolate_color(self, mobject1, mobject2, alpha):
104-
assert mobject1.pixel_array.shape == mobject2.pixel_array.shape
104+
assert mobject1.pixel_array.shape == mobject2.pixel_array.shape, (
105+
f"Mobject pixel array shapes incompatible for interpolation.\n"
106+
f"Mobject 1 ({mobject1}) : {mobject1.pixel_array.shape}\n"
107+
f"Mobject 2 ({mobject2}) : {mobject1.pixel_array.shape}"
108+
)
105109
self.pixel_array = interpolate(
106110
mobject1.pixel_array, mobject2.pixel_array, alpha
107111
).astype(self.pixel_array_dtype)
@@ -123,14 +127,27 @@ class ImageMobjectFromCamera(AbstractImageMobject):
123127

124128
def __init__(self, camera, **kwargs):
125129
self.camera = camera
130+
self.pixel_array = self.camera.pixel_array
126131
AbstractImageMobject.__init__(self, **kwargs)
127132

133+
# TODO: Get rid of this.
128134
def get_pixel_array(self):
129-
return self.camera.get_pixel_array()
135+
self.pixel_array = self.camera.pixel_array
136+
return self.pixel_array
130137

131138
def add_display_frame(self, **kwargs):
132139
config = dict(self.default_display_frame_config)
133140
config.update(kwargs)
134141
self.display_frame = SurroundingRectangle(self, **config)
135142
self.add(self.display_frame)
136143
return self
144+
145+
def interpolate_color(self, mobject1, mobject2, alpha):
146+
assert mobject1.pixel_array.shape == mobject2.pixel_array.shape, (
147+
f"Mobject pixel array shapes incompatible for interpolation.\n"
148+
f"Mobject 1 ({mobject1}) : {mobject1.pixel_array.shape}\n"
149+
f"Mobject 2 ({mobject2}) : {mobject1.pixel_array.shape}"
150+
)
151+
self.pixel_array = interpolate(
152+
mobject1.pixel_array, mobject2.pixel_array, alpha
153+
).astype(self.pixel_array_dtype)

manim/scene/zoomed_scene.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def get_zoomed_display_pop_out_animation(self, **kwargs):
126126
The Animation of the Zoomed Display popping out.
127127
"""
128128
display = self.zoomed_display
129-
display.save_state(use_deepcopy=True)
129+
display.save_state()
130130
display.replace(self.zoomed_camera.frame, stretch=True)
131131
return ApplyMethod(display.restore)
132132

0 commit comments

Comments
 (0)