2018-12-24 12:37:51 -08:00
|
|
|
from manimlib.animation.animation import Animation
|
|
|
|
from manimlib.utils.bezier import interpolate
|
|
|
|
from manimlib.utils.config_ops import digest_config
|
2018-03-31 18:49:28 -07:00
|
|
|
|
2018-04-06 13:58:59 -07:00
|
|
|
|
2018-03-31 18:49:28 -07:00
|
|
|
class ChangingDecimal(Animation):
|
|
|
|
CONFIG = {
|
2018-05-09 18:21:25 +02:00
|
|
|
"num_decimal_places": None,
|
2018-04-06 13:58:59 -07:00
|
|
|
"show_ellipsis": None,
|
|
|
|
"position_update_func": None,
|
2018-06-13 17:11:31 -07:00
|
|
|
"include_sign": None,
|
2018-04-06 13:58:59 -07:00
|
|
|
"tracked_mobject": None,
|
2018-03-31 18:49:28 -07:00
|
|
|
}
|
2018-04-06 13:58:59 -07:00
|
|
|
|
2018-03-31 18:49:28 -07:00
|
|
|
def __init__(self, decimal_number_mobject, number_update_func, **kwargs):
|
|
|
|
digest_config(self, kwargs, locals())
|
|
|
|
if self.tracked_mobject:
|
|
|
|
dmc = decimal_number_mobject.get_center()
|
|
|
|
tmc = self.tracked_mobject.get_center()
|
|
|
|
self.diff_from_tracked_mobject = dmc - tmc
|
2018-08-13 13:40:52 -07:00
|
|
|
self.diff_from_tracked_mobject = dmc - tmc
|
2018-03-31 18:49:28 -07:00
|
|
|
Animation.__init__(self, decimal_number_mobject, **kwargs)
|
|
|
|
|
2019-02-08 11:57:27 -08:00
|
|
|
def interpolate_mobject(self, alpha):
|
2018-03-31 18:49:28 -07:00
|
|
|
self.update_number(alpha)
|
|
|
|
self.update_position()
|
|
|
|
|
|
|
|
def update_number(self, alpha):
|
2018-08-12 19:05:31 -07:00
|
|
|
self.decimal_number_mobject.set_value(
|
|
|
|
self.number_update_func(alpha)
|
2018-03-31 18:49:28 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
def update_position(self):
|
|
|
|
if self.position_update_func is not None:
|
|
|
|
self.position_update_func(self.decimal_number_mobject)
|
|
|
|
elif self.tracked_mobject is not None:
|
2018-04-06 13:58:59 -07:00
|
|
|
self.decimal_number_mobject.move_to(
|
|
|
|
self.tracked_mobject.get_center() + self.diff_from_tracked_mobject)
|
|
|
|
|
2018-03-31 18:49:28 -07:00
|
|
|
|
|
|
|
class ChangeDecimalToValue(ChangingDecimal):
|
|
|
|
def __init__(self, decimal_number_mobject, target_number, **kwargs):
|
|
|
|
start_number = decimal_number_mobject.number
|
2018-04-06 13:58:59 -07:00
|
|
|
|
|
|
|
def func(alpha):
|
|
|
|
return interpolate(start_number, target_number, alpha)
|
2018-03-31 18:49:28 -07:00
|
|
|
ChangingDecimal.__init__(self, decimal_number_mobject, func, **kwargs)
|