Modified behavior of ChangingDecimal so that labels keep track of displacement from tracked_mobject

This commit is contained in:
Sridhar Ramesh
2018-01-09 17:11:40 -08:00
parent 3696ce748d
commit aea7da222d

View File

@ -50,24 +50,27 @@ class ChangingDecimal(Animation):
"num_decimal_points" : None, "num_decimal_points" : None,
"spare_parts" : 2, "spare_parts" : 2,
"position_update_func" : None, "position_update_func" : None,
"tracked_mobject" : None, "tracked_mobject" : None
} }
def __init__(self, decimal_number, number_update_func, **kwargs): def __init__(self, decimal_number_mobject, number_update_func, **kwargs):
digest_config(self, kwargs, locals()) digest_config(self, kwargs, locals())
if self.num_decimal_points is None: if self.num_decimal_points is None:
self.num_decimal_points = decimal_number.num_decimal_points self.num_decimal_points = decimal_number_mobject.num_decimal_points
decimal_number.add(*[ decimal_number_mobject.add(*[
VectorizedPoint(decimal_number.get_corner(DOWN+LEFT)) VectorizedPoint(decimal_number_mobject.get_corner(DOWN+LEFT))
for x in range(self.spare_parts)] for x in range(self.spare_parts)]
) )
Animation.__init__(self, decimal_number, **kwargs) if self.tracked_mobject:
self.diff_from_tracked_mobject = \
decimal_number_mobject.get_center() - self.tracked_mobject.get_center()
Animation.__init__(self, decimal_number_mobject, **kwargs)
def update_mobject(self, alpha): def update_mobject(self, alpha):
self.update_number(alpha) self.update_number(alpha)
self.update_position() self.update_position()
def update_number(self, alpha): def update_number(self, alpha):
decimal = self.decimal_number decimal = self.decimal_number_mobject
new_number = self.number_update_func(alpha) new_number = self.number_update_func(alpha)
new_decimal = DecimalNumber( new_decimal = DecimalNumber(
new_number, num_decimal_points = self.num_decimal_points new_number, num_decimal_points = self.num_decimal_points
@ -85,14 +88,14 @@ class ChangingDecimal(Animation):
def update_position(self): def update_position(self):
if self.position_update_func is not None: if self.position_update_func is not None:
self.position_update_func(self.decimal_number) self.position_update_func(self.decimal_number_mobject)
elif self.tracked_mobject is not None: elif self.tracked_mobject is not None:
self.decimal_number.move_to(self.tracked_mobject) self.decimal_number_mobject.move_to(self.tracked_mobject.get_center() + self.diff_from_tracked_mobject)
class ContinualChangingDecimal(ContinualAnimation): class ContinualChangingDecimal(ContinualAnimation):
def __init__(self, decimal_number, number_update_func, **kwargs): def __init__(self, decimal_number_mobject, number_update_func, **kwargs):
self.anim = ChangingDecimal(decimal_number, number_update_func, **kwargs) self.anim = ChangingDecimal(decimal_number_mobject, number_update_func, **kwargs)
ContinualAnimation.__init__(self, decimal_number, **kwargs) ContinualAnimation.__init__(self, decimal_number_mobject, **kwargs)
def update_mobject(self, dt): def update_mobject(self, dt):
self.anim.update(self.internal_time) self.anim.update(self.internal_time)