updating_mobject_from_func -> always_redraw

This commit is contained in:
Grant Sanderson 2019-02-11 12:58:52 -08:00
parent 33afad478c
commit 94d7a8a663
11 changed files with 48 additions and 48 deletions

View file

@ -99,8 +99,8 @@ class ShowShadows(ThreeDScene):
self.gamma_tracker = ValueTracker(0) self.gamma_tracker = ValueTracker(0)
def setup_object_and_shadow(self): def setup_object_and_shadow(self):
self.obj3d = updating_mobject_from_func(self.get_reoriented_object) self.obj3d = always_redraw(self.get_reoriented_object)
self.shadow = updating_mobject_from_func(lambda: get_shadow(self.obj3d)) self.shadow = always_redraw(lambda: get_shadow(self.obj3d))
def add_shadow_area_label(self): def add_shadow_area_label(self):
text = TextMobject("Shadow area: ") text = TextMobject("Shadow area: ")
@ -145,7 +145,7 @@ class ShowShadows(ThreeDScene):
# Show creation # Show creation
obj3d = self.obj3d.copy() obj3d = self.obj3d.copy()
obj3d.clear_updaters() obj3d.clear_updaters()
temp_shadow = updating_mobject_from_func(lambda: get_shadow(obj3d)) temp_shadow = always_redraw(lambda: get_shadow(obj3d))
self.add(temp_shadow) self.add(temp_shadow)
self.move_camera( self.move_camera(
**self.initial_orientation_config, **self.initial_orientation_config,

View file

@ -13,7 +13,7 @@ from manimlib.animation.fading import FadeIn
from manimlib.animation.fading import FadeOut from manimlib.animation.fading import FadeOut
from manimlib.animation.transform import Transform from manimlib.animation.transform import Transform
from manimlib.animation.update import UpdateFromAlphaFunc from manimlib.animation.update import UpdateFromAlphaFunc
from manimlib.mobject.mobject_update_utils import updating_mobject_from_func from manimlib.mobject.mobject_update_utils import always_redraw
from manimlib.mobject.mobject import Mobject from manimlib.mobject.mobject import Mobject
from manimlib.mobject.types.vectorized_mobject import VMobject from manimlib.mobject.types.vectorized_mobject import VMobject
from manimlib.mobject.geometry import Circle from manimlib.mobject.geometry import Circle

View file

@ -1,4 +1,4 @@
def updating_mobject_from_func(func): def always_redraw(func):
mob = func() mob = func()
mob.add_updater(lambda m: mob.become(func())) mob.add_updater(lambda m: mob.become(func()))
return mob return mob

View file

@ -106,7 +106,7 @@ class UnexpectedConnection(Scene):
stroke_width=5 stroke_width=5
).shift(center) ).shift(center)
arc = updating_mobject_from_func(get_arc) arc = always_redraw(get_arc)
decimal = DecimalNumber(0) decimal = DecimalNumber(0)
decimal.add_updater( decimal.add_updater(
@ -613,7 +613,7 @@ class FunctionGInputSpace(SpecialThreeDScene):
def show_antipodal_point(self): def show_antipodal_point(self):
path = self.get_antipodal_path() path = self.get_antipodal_path()
end_dot = updating_mobject_from_func( end_dot = always_redraw(
lambda: self.get_dot( lambda: self.get_dot(
path[-1].point_from_proportion(1) path[-1].point_from_proportion(1)
).set_color(RED) ).set_color(RED)
@ -701,7 +701,7 @@ class FunctionGInputSpace(SpecialThreeDScene):
self.add(self.tracked_point) self.add(self.tracked_point)
def init_dot(self): def init_dot(self):
self.dot = updating_mobject_from_func( self.dot = always_redraw(
lambda: self.get_dot(self.tracked_point.get_center()) lambda: self.get_dot(self.tracked_point.get_center())
) )

View file

@ -2055,7 +2055,7 @@ class AddTwoThetaManyTimes(Scene):
result[1].scale(1.5, about_edge=LEFT) result[1].scale(1.5, about_edge=LEFT)
return result return result
comp_pi = updating_mobject_from_func(get_comp_pi) comp_pi = always_redraw(get_comp_pi)
return VGroup(int_mob, tex_mob, rhs, comp_pi) return VGroup(int_mob, tex_mob, rhs, comp_pi)
@ -2548,7 +2548,7 @@ class ActanAndTanGraphs(GraphScene):
label.next_to(graph.point_from_proportion(0.75), LEFT) label.next_to(graph.point_from_proportion(0.75), LEFT)
arctan_x_tracker = ValueTracker(3 * PI / 8) arctan_x_tracker = ValueTracker(3 * PI / 8)
arctan_v_line = updating_mobject_from_func( arctan_v_line = always_redraw(
lambda: self.get_vertical_line_to_graph( lambda: self.get_vertical_line_to_graph(
arctan_x_tracker.get_value(), arctan_x_tracker.get_value(),
arctan_graph, arctan_graph,
@ -2557,7 +2557,7 @@ class ActanAndTanGraphs(GraphScene):
) )
) )
tan_x_tracker = ValueTracker(2 * PI / 8) tan_x_tracker = ValueTracker(2 * PI / 8)
tan_v_line = updating_mobject_from_func( tan_v_line = always_redraw(
lambda: self.get_vertical_line_to_graph( lambda: self.get_vertical_line_to_graph(
tan_x_tracker.get_value(), tan_x_tracker.get_value(),
tan_graph, tan_graph,
@ -2643,7 +2643,7 @@ class UnitCircleIntuition(Scene):
circle.get_center(), circle.get_center(),
circle.point_at_angle(get_theta()) circle.point_at_angle(get_theta())
) )
r_line = updating_mobject_from_func(get_r_line) r_line = always_redraw(get_r_line)
def get_arc(radius=None, **kwargs): def get_arc(radius=None, **kwargs):
if radius is None: if radius is None:
@ -2656,8 +2656,8 @@ class UnitCircleIntuition(Scene):
arc_center=circle.get_center(), arc_center=circle.get_center(),
**kwargs **kwargs
) )
arc = updating_mobject_from_func(get_arc) arc = always_redraw(get_arc)
self.circle_arc = updating_mobject_from_func( self.circle_arc = always_redraw(
lambda: get_arc(radius=circle.radius, color=RED) lambda: get_arc(radius=circle.radius, color=RED)
) )
@ -2670,7 +2670,7 @@ class UnitCircleIntuition(Scene):
vect = (get_norm(vect) + 2 * SMALL_BUFF) * normalize(vect) vect = (get_norm(vect) + 2 * SMALL_BUFF) * normalize(vect)
label.move_to(center + vect) label.move_to(center + vect)
return label return label
theta_label = updating_mobject_from_func(get_theta_label) theta_label = always_redraw(get_theta_label)
def get_height_line(): def get_height_line():
p2 = circle.point_at_angle(get_theta()) p2 = circle.point_at_angle(get_theta())
@ -2681,7 +2681,7 @@ class UnitCircleIntuition(Scene):
stroke_color=YELLOW, stroke_color=YELLOW,
stroke_width=3, stroke_width=3,
) )
self.height_line = updating_mobject_from_func(get_height_line) self.height_line = always_redraw(get_height_line)
def get_width_line(): def get_width_line():
p2 = circle.get_center() p2 = circle.get_center()
@ -2692,7 +2692,7 @@ class UnitCircleIntuition(Scene):
stroke_color=PINK, stroke_color=PINK,
stroke_width=3, stroke_width=3,
) )
self.width_line = updating_mobject_from_func(get_width_line) self.width_line = always_redraw(get_width_line)
def get_h_label(): def get_h_label():
label = TexMobject("h") label = TexMobject("h")
@ -2702,7 +2702,7 @@ class UnitCircleIntuition(Scene):
label.set_stroke(BLACK, 3, background=True) label.set_stroke(BLACK, 3, background=True)
label.next_to(height_line, RIGHT, SMALL_BUFF) label.next_to(height_line, RIGHT, SMALL_BUFF)
return label return label
self.h_label = updating_mobject_from_func(get_h_label) self.h_label = always_redraw(get_h_label)
def get_w_label(): def get_w_label():
label = TexMobject("w") label = TexMobject("w")
@ -2710,7 +2710,7 @@ class UnitCircleIntuition(Scene):
label.match_color(width_line) label.match_color(width_line)
label.next_to(width_line, DOWN, SMALL_BUFF) label.next_to(width_line, DOWN, SMALL_BUFF)
return label return label
self.w_label = updating_mobject_from_func(get_w_label) self.w_label = always_redraw(get_w_label)
self.add(r_line, theta_label, arc, self.radius_line) self.add(r_line, theta_label, arc, self.radius_line)
self.play( self.play(

View file

@ -99,7 +99,7 @@ class MirrorScene(Scene):
return mirrors return mirrors
def get_arc(self, radius=0.5): def get_arc(self, radius=0.5):
return updating_mobject_from_func(lambda: Arc( return always_redraw(lambda: Arc(
start_angle=0, start_angle=0,
angle=self.get_theta(), angle=self.get_theta(),
arc_center=self.get_center(), arc_center=self.get_center(),
@ -483,7 +483,7 @@ class ReflectWorldThroughMirrorNew(MirrorScene):
rw[0].set_fill(opacity=0.25) rw[0].set_fill(opacity=0.25)
def create_reflected_trajectories(self): def create_reflected_trajectories(self):
self.reflected_trajectories = updating_mobject_from_func( self.reflected_trajectories = always_redraw(
lambda: self.get_reflected_worlds(self.trajectory) lambda: self.get_reflected_worlds(self.trajectory)
) )
@ -951,7 +951,7 @@ class MirrorAndWiresOverlay(MirrorScene):
angle=dl_wire.get_angle(), angle=dl_wire.get_angle(),
**arc_config, **arc_config,
) )
dl_arc = updating_mobject_from_func(get_dl_arc) dl_arc = always_redraw(get_dl_arc)
def get_dr_arc(): def get_dr_arc():
return Arc( return Arc(
@ -959,7 +959,7 @@ class MirrorAndWiresOverlay(MirrorScene):
angle=dr_wire.get_angle() - PI, angle=dr_wire.get_angle() - PI,
**arc_config, **arc_config,
) )
dr_arc = updating_mobject_from_func(get_dr_arc) dr_arc = always_redraw(get_dr_arc)
incidence = TextMobject("Incidence") incidence = TextMobject("Incidence")
reflection = TextMobject("Reflection") reflection = TextMobject("Reflection")

View file

@ -470,7 +470,7 @@ class PositionPhaseSpaceScene(Scene):
y_axis_point, point, y_axis_point, point,
**self.ps_x_line_config, **self.ps_x_line_config,
) )
self.x_line = updating_mobject_from_func(get_x_line) self.x_line = always_redraw(get_x_line)
return self.x_line return self.x_line
def get_phase_space_y_line(self): def get_phase_space_y_line(self):
@ -483,7 +483,7 @@ class PositionPhaseSpaceScene(Scene):
x_axis_point, point, x_axis_point, point,
**self.ps_y_line_config, **self.ps_y_line_config,
) )
self.y_line = updating_mobject_from_func(get_y_line) self.y_line = always_redraw(get_y_line)
return self.y_line return self.y_line
def get_phase_space_dot(self): def get_phase_space_dot(self):
@ -541,7 +541,7 @@ class PositionPhaseSpaceScene(Scene):
line.put_start_and_end_on(left_point, right_point) line.put_start_and_end_on(left_point, right_point)
return Brace(line, UP, buff=SMALL_BUFF) return Brace(line, UP, buff=SMALL_BUFF)
brace = updating_mobject_from_func(get_brace) brace = always_redraw(get_brace)
return brace return brace
def get_d1_brace(self): def get_d1_brace(self):

View file

@ -161,7 +161,7 @@ class ShowDotProductMeaning(Scene):
stroke_color=LIGHT_GREY, stroke_color=LIGHT_GREY,
stroke_width=1, stroke_width=1,
) )
w_line = updating_mobject_from_func(get_w_line) w_line = always_redraw(get_w_line)
def get_proj_v(): def get_proj_v():
center = dot.get_center() center = dot.get_center()
@ -172,7 +172,7 @@ class ShowDotProductMeaning(Scene):
result.set_fill(v_vect.get_color(), 0.5) result.set_fill(v_vect.get_color(), 0.5)
result.shift(center - result.get_start()) result.shift(center - result.get_start())
return result return result
proj_v = updating_mobject_from_func(get_proj_v) proj_v = always_redraw(get_proj_v)
def get_proj_line(): def get_proj_line():
return DashedLine( return DashedLine(
@ -181,7 +181,7 @@ class ShowDotProductMeaning(Scene):
stroke_width=1, stroke_width=1,
dash_length=0.025, dash_length=0.025,
) )
proj_line = updating_mobject_from_func(get_proj_line) proj_line = always_redraw(get_proj_line)
template_line = Line(LEFT, RIGHT) template_line = Line(LEFT, RIGHT)
@ -194,10 +194,10 @@ class ShowDotProductMeaning(Scene):
brace.rotate(angle, about_point=ORIGIN) brace.rotate(angle, about_point=ORIGIN)
brace.shift(vect.get_center()) brace.shift(vect.get_center())
return brace return brace
w_brace = updating_mobject_from_func( w_brace = always_redraw(
lambda: get_vect_brace(w_vect) lambda: get_vect_brace(w_vect)
) )
proj_v_brace = updating_mobject_from_func( proj_v_brace = always_redraw(
lambda: get_vect_brace(proj_v) lambda: get_vect_brace(proj_v)
) )
@ -217,7 +217,7 @@ class ShowDotProductMeaning(Scene):
center + 1.5 * (p - center) center + 1.5 * (p - center)
) )
return VGroup(arc, theta) return VGroup(arc, theta)
arc = updating_mobject_from_func(get_arc) arc = always_redraw(get_arc)
self.add( self.add(
title[:3], title[:3],
@ -464,7 +464,7 @@ class AskAboutAddingThetaToItself(Scene):
result.set_color(get_color()) result.set_color(get_color())
result.move_to(ineq) result.move_to(ineq)
return result return result
dynamic_ineq = updating_mobject_from_func(get_ineq) dynamic_ineq = always_redraw(get_ineq)
group.remove(ineq) group.remove(ineq)
group.add(dynamic_ineq) group.add(dynamic_ineq)

View file

@ -455,7 +455,7 @@ class ShowSeveralQuaternionRotations(SpecialThreeDScene):
self.add(prism) self.add(prism)
def add_axes(self): def add_axes(self):
axes = self.axes = updating_mobject_from_func(self.get_axes) axes = self.axes = always_redraw(self.get_axes)
self.add(axes) self.add(axes)
def apply_quaternions(self): def apply_quaternions(self):
@ -659,7 +659,7 @@ class EulerAnglesAndGimbal(ShowSeveralQuaternionRotations):
self.gamma_tracker = ValueTracker(0) self.gamma_tracker = ValueTracker(0)
def setup_gimbal(self): def setup_gimbal(self):
gimbal = updating_mobject_from_func(self.get_gimbal) gimbal = always_redraw(self.get_gimbal)
self.gimbal = gimbal self.gimbal = gimbal
self.add(gimbal) self.add(gimbal)
@ -1245,7 +1245,7 @@ class RuleForQuaternionRotations(EulerAnglesAndGimbal):
result.rotate(angle=angle, axis=axis, about_point=ORIGIN) result.rotate(angle=angle, axis=axis, about_point=ORIGIN)
return result return result
sphere = updating_mobject_from_func(get_sphere) sphere = always_redraw(get_sphere)
point_label = TexMobject( point_label = TexMobject(
"p", "=", "p", "=",

View file

@ -2832,7 +2832,7 @@ class ShowRotationUnderStereographicProjection(IntroduceStereographicProjection)
neg_one_dot = Dot(neg_one_point) neg_one_dot = Dot(neg_one_point)
neg_one_dot.set_fill(YELLOW) neg_one_dot.set_fill(YELLOW)
lines = updating_mobject_from_func(self.get_lines) lines = always_redraw(self.get_lines)
def generate_dot_updater(circle_piece): def generate_dot_updater(circle_piece):
return lambda d: d.move_to(circle_piece.points[0]) return lambda d: d.move_to(circle_piece.points[0])

View file

@ -582,7 +582,7 @@ class UnfoldCircles(Scene):
unwrap_factor_tracker = ValueTracker(0) unwrap_factor_tracker = ValueTracker(0)
def get_circle(line): def get_circle(line):
return updating_mobject_from_func( return always_redraw(
lambda: self.get_unwrapped_circle( lambda: self.get_unwrapped_circle(
radius=radius, dr=self.dr, radius=radius, dr=self.dr,
unwrap_factor=unwrap_factor_tracker.get_value(), unwrap_factor=unwrap_factor_tracker.get_value(),
@ -1073,7 +1073,7 @@ class SlantedShadowSquishing(ShowShadows):
self.begin_ambient_camera_rotation(0.01) self.begin_ambient_camera_rotation(0.01)
square = self.obj3d.deepcopy() square = self.obj3d.deepcopy()
square.clear_updaters() square.clear_updaters()
shadow = updating_mobject_from_func(lambda: get_shadow(square)) shadow = always_redraw(lambda: get_shadow(square))
# Reorient # Reorient
self.add(square, shadow) self.add(square, shadow)
@ -1998,13 +1998,13 @@ class SameEffectAsRotating(Scene):
group.center() group.center()
moving_rect = rect1.copy() moving_rect = rect1.copy()
low_brace = updating_mobject_from_func( low_brace = always_redraw(
lambda: Brace( lambda: Brace(
moving_rect, DOWN, buff=SMALL_BUFF, moving_rect, DOWN, buff=SMALL_BUFF,
min_num_quads=2, min_num_quads=2,
) )
) )
right_brace = updating_mobject_from_func( right_brace = always_redraw(
lambda: Brace( lambda: Brace(
moving_rect, RIGHT, buff=SMALL_BUFF, moving_rect, RIGHT, buff=SMALL_BUFF,
min_num_quads=2, min_num_quads=2,
@ -2331,7 +2331,7 @@ class WhatIsSurfaceArea(SpecialThreeDScene):
self.add_fixed_in_frame_mobjects(title) self.add_fixed_in_frame_mobjects(title)
power_tracker = ValueTracker(1) power_tracker = ValueTracker(1)
surface = updating_mobject_from_func( surface = always_redraw(
lambda: self.get_surface( lambda: self.get_surface(
radius=3, radius=3,
amplitude=1, amplitude=1,
@ -2484,7 +2484,7 @@ class UnwrappedCircleLogic(UnfoldCircles):
).set_stroke(YELLOW, 2) ).set_stroke(YELLOW, 2)
return result return result
unwrapped_circle = updating_mobject_from_func(get_unwrapped_circle) unwrapped_circle = always_redraw(get_unwrapped_circle)
circle = unwrapped_circle.copy() circle = unwrapped_circle.copy()
circle.clear_updaters() circle.clear_updaters()
R_line = Line(circle.get_center(), circle.get_bottom()) R_line = Line(circle.get_center(), circle.get_bottom())
@ -2493,7 +2493,7 @@ class UnwrappedCircleLogic(UnfoldCircles):
R_label.next_to(R_line, LEFT) R_label.next_to(R_line, LEFT)
circle_group = VGroup(circle, R_line, R_label) circle_group = VGroup(circle, R_line, R_label)
tri_R_line = updating_mobject_from_func( tri_R_line = always_redraw(
lambda: Line( lambda: Line(
ORIGIN, radius * DOWN ORIGIN, radius * DOWN
).shift(center_tracker.get_center()) ).shift(center_tracker.get_center())
@ -2515,7 +2515,7 @@ class UnwrappedCircleLogic(UnfoldCircles):
self.wait() self.wait()
# Change radius # Change radius
r_line = updating_mobject_from_func( r_line = always_redraw(
lambda: Line( lambda: Line(
ORIGIN, get_r() * DOWN, ORIGIN, get_r() * DOWN,
stroke_width=2, stroke_width=2,
@ -2930,7 +2930,7 @@ class SecondProof(SpecialThreeDScene):
def show_theta(self): def show_theta(self):
theta_tracker = ValueTracker(0) theta_tracker = ValueTracker(0)
get_theta = theta_tracker.get_value get_theta = theta_tracker.get_value
theta_group = updating_mobject_from_func( theta_group = always_redraw(
lambda: self.get_theta_group(get_theta()) lambda: self.get_theta_group(get_theta())
) )
theta_mob_opacity_tracker = ValueTracker(0) theta_mob_opacity_tracker = ValueTracker(0)
@ -2945,7 +2945,7 @@ class SecondProof(SpecialThreeDScene):
) )
) )
lit_ring = updating_mobject_from_func( lit_ring = always_redraw(
lambda: self.get_ring_from_theta( lambda: self.get_ring_from_theta(
self.rings, get_theta() self.rings, get_theta()
).copy().set_color(YELLOW) ).copy().set_color(YELLOW)
@ -3113,7 +3113,7 @@ class SecondProof(SpecialThreeDScene):
def ask_about_2_to_1_correspondance(self): def ask_about_2_to_1_correspondance(self):
theta_tracker = ValueTracker(0) theta_tracker = ValueTracker(0)
get_theta = theta_tracker.get_value get_theta = theta_tracker.get_value
new_lit_ring = updating_mobject_from_func( new_lit_ring = always_redraw(
lambda: self.get_ring_from_theta( lambda: self.get_ring_from_theta(
self.rings, get_theta() self.rings, get_theta()
).copy().set_color(PINK) ).copy().set_color(PINK)