Skip to content

Commit f8a55aa

Browse files
committed
Update ThreeDScene, move Scene.camera
1 parent eddbb06 commit f8a55aa

File tree

3 files changed

+34
-33
lines changed

3 files changed

+34
-33
lines changed

manim/renderer/cairo_renderer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ class CairoRenderer:
8686
time: time elapsed since initialisation of scene.
8787
"""
8888

89-
def __init__(self, scene, camera):
90-
self.camera = camera
89+
def __init__(self, scene, camera_class):
90+
self.camera = camera_class(**camera_config)
9191

9292
# All of the following are set to EITHER the value passed via kwargs,
9393
# OR the value stored in the global config dict at the time of

manim/scene/scene.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,7 @@ def construct(self):
6565

6666
def __init__(self, **kwargs):
6767
Container.__init__(self, **kwargs)
68-
self.camera = self.camera_class(**camera_config)
69-
self.renderer = CairoRenderer(self, self.camera)
68+
self.renderer = CairoRenderer(self, self.camera_class)
7069

7170
self.mobjects = []
7271
# TODO, remove need for foreground mobjects
@@ -556,7 +555,7 @@ def get_time_progression(
556555
if file_writer_config["skip_animations"] and not override_skip_animations:
557556
times = [run_time]
558557
else:
559-
step = 1 / self.camera.frame_rate
558+
step = 1 / self.renderer.camera.frame_rate
560559
times = np.arange(0, run_time, step)
561560
time_progression = ProgressDisplay(
562561
times,
@@ -819,7 +818,7 @@ def wait_internal(self, duration=DEFAULT_WAIT_TIME, stop_condition=None):
819818
return self
820819
else:
821820
self.renderer.update_frame()
822-
dt = 1 / self.camera.frame_rate
821+
dt = 1 / self.renderer.camera.frame_rate
823822
self.renderer.add_frame(
824823
self.renderer.get_frame(), num_frames=int(duration / dt)
825824
)

manim/scene/three_d_scene.py

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ def set_camera_orientation(self, phi=None, theta=None, distance=None, gamma=None
5353
The rotation of the camera about the vector from the ORIGIN to the Camera.
5454
"""
5555
if phi is not None:
56-
self.camera.set_phi(phi)
56+
self.renderer.camera.set_phi(phi)
5757
if theta is not None:
58-
self.camera.set_theta(theta)
58+
self.renderer.camera.set_theta(theta)
5959
if distance is not None:
60-
self.camera.set_distance(distance)
60+
self.renderer.camera.set_distance(distance)
6161
if gamma is not None:
62-
self.camera.set_gamma(gamma)
62+
self.renderer.camera.set_gamma(gamma)
6363

6464
def begin_ambient_camera_rotation(self, rate=0.02):
6565
"""
@@ -74,17 +74,17 @@ def begin_ambient_camera_rotation(self, rate=0.02):
7474
"""
7575
# TODO, use a ValueTracker for rate, so that it
7676
# can begin and end smoothly
77-
self.camera.theta_tracker.add_updater(
77+
self.renderer.camera.theta_tracker.add_updater(
7878
lambda m, dt: m.increment_value(rate * dt)
7979
)
80-
self.add(self.camera.theta_tracker)
80+
self.add(self.renderer.camera.theta_tracker)
8181

8282
def stop_ambient_camera_rotation(self):
8383
"""
8484
This method stops all ambient camera rotation.
8585
"""
86-
self.camera.theta_tracker.clear_updaters()
87-
self.remove(self.camera.theta_tracker)
86+
self.renderer.camera.theta_tracker.clear_updaters()
87+
self.remove(self.renderer.camera.theta_tracker)
8888

8989
def begin_3dillusion_camera_rotation(
9090
self, rate=1, origin_theta=-60 * DEGREES, origin_phi=75 * DEGREES
@@ -96,8 +96,8 @@ def uptate_theta(m, dt):
9696
val_for_left_right = 0.2 * np.sin(val_tracker_theta.get_value())
9797
return m.set_value(origin_theta + val_for_left_right)
9898

99-
self.camera.theta_tracker.add_updater(uptate_theta)
100-
self.add(self.camera.theta_tracker)
99+
self.renderer.camera.theta_tracker.add_updater(uptate_theta)
100+
self.add(self.renderer.camera.theta_tracker)
101101

102102
val_tracker_phi = ValueTracker(0)
103103

@@ -106,17 +106,17 @@ def update_phi(m, dt):
106106
val_for_up_down = 0.1 * np.cos(val_tracker_phi.get_value())
107107
return m.set_value(origin_phi + val_for_up_down)
108108

109-
self.camera.phi_tracker.add_updater(update_phi)
110-
self.add(self.camera.phi_tracker)
109+
self.renderer.camera.phi_tracker.add_updater(update_phi)
110+
self.add(self.renderer.camera.phi_tracker)
111111

112112
def stop_3dillusion_camera_rotation(self):
113113
"""
114114
This method stops all illusion camera rotations.
115115
"""
116-
self.camera.theta_tracker.clear_updaters()
117-
self.remove(self.camera.theta_tracker)
118-
self.camera.phi_tracker.clear_updaters()
119-
self.remove(self.camera.phi_tracker)
116+
self.renderer.camera.theta_tracker.clear_updaters()
117+
self.remove(self.renderer.camera.theta_tracker)
118+
self.renderer.camera.phi_tracker.clear_updaters()
119+
self.remove(self.renderer.camera.phi_tracker)
120120

121121
def move_camera(
122122
self,
@@ -155,16 +155,18 @@ def move_camera(
155155
"""
156156
anims = []
157157
value_tracker_pairs = [
158-
(phi, self.camera.phi_tracker),
159-
(theta, self.camera.theta_tracker),
160-
(distance, self.camera.distance_tracker),
161-
(gamma, self.camera.gamma_tracker),
158+
(phi, self.renderer.camera.phi_tracker),
159+
(theta, self.renderer.camera.theta_tracker),
160+
(distance, self.renderer.camera.distance_tracker),
161+
(gamma, self.renderer.camera.gamma_tracker),
162162
]
163163
for value, tracker in value_tracker_pairs:
164164
if value is not None:
165165
anims.append(ApplyMethod(tracker.set_value, value, **kwargs))
166166
if frame_center is not None:
167-
anims.append(ApplyMethod(self.camera.frame_center.move_to, frame_center))
167+
anims.append(
168+
ApplyMethod(self.renderer.camera.frame_center.move_to, frame_center)
169+
)
168170

169171
self.play(*anims + added_anims)
170172

@@ -179,7 +181,7 @@ def get_moving_mobjects(self, *animations):
179181
The animations whose mobjects will be checked.
180182
"""
181183
moving_mobjects = Scene.get_moving_mobjects(self, *animations)
182-
camera_mobjects = self.camera.get_value_trackers()
184+
camera_mobjects = self.renderer.camera.get_value_trackers()
183185
if any([cm in moving_mobjects for cm in camera_mobjects]):
184186
return self.mobjects
185187
return moving_mobjects
@@ -203,7 +205,7 @@ def add_fixed_orientation_mobjects(self, *mobjects, **kwargs):
203205
center_func : function
204206
"""
205207
self.add(*mobjects)
206-
self.camera.add_fixed_orientation_mobjects(*mobjects, **kwargs)
208+
self.renderer.camera.add_fixed_orientation_mobjects(*mobjects, **kwargs)
207209

208210
def add_fixed_in_frame_mobjects(self, *mobjects):
209211
"""
@@ -218,7 +220,7 @@ def add_fixed_in_frame_mobjects(self, *mobjects):
218220
The Mobjects whose orientation must be fixed.
219221
"""
220222
self.add(*mobjects)
221-
self.camera.add_fixed_in_frame_mobjects(*mobjects)
223+
self.renderer.camera.add_fixed_in_frame_mobjects(*mobjects)
222224

223225
def remove_fixed_orientation_mobjects(self, *mobjects):
224226
"""
@@ -232,7 +234,7 @@ def remove_fixed_orientation_mobjects(self, *mobjects):
232234
*mobjects : Mobjects
233235
The Mobjects whose orientation must be unfixed.
234236
"""
235-
self.camera.remove_fixed_orientation_mobjects(*mobjects)
237+
self.renderer.camera.remove_fixed_orientation_mobjects(*mobjects)
236238

237239
def remove_fixed_in_frame_mobjects(self, *mobjects):
238240
"""
@@ -245,7 +247,7 @@ def remove_fixed_in_frame_mobjects(self, *mobjects):
245247
*mobjects : Mobjects
246248
The Mobjects whose position and orientation must be unfixed.
247249
"""
248-
self.camera.remove_fixed_in_frame_mobjects(*mobjects)
250+
self.renderer.camera.remove_fixed_in_frame_mobjects(*mobjects)
249251

250252
##
251253
def set_to_default_angled_camera_orientation(self, **kwargs):
@@ -305,7 +307,7 @@ class SpecialThreeDScene(ThreeDScene):
305307

306308
def __init__(self, **kwargs):
307309
digest_config(self, kwargs)
308-
if self.camera_config["pixel_width"] == config["pixel_width"]:
310+
if self.renderer.camera_config["pixel_width"] == config["pixel_width"]:
309311
config = {}
310312
else:
311313
config = self.low_quality_config

0 commit comments

Comments
 (0)