From 9e534fb78f81020cb54e127153a4b95e28ffe522 Mon Sep 17 00:00:00 2001 From: Grant Sanderson Date: Sun, 12 Aug 2018 19:05:31 -0700 Subject: [PATCH] Update Decimal number changing --- animation/numbers.py | 23 ++--------------------- mobject/numbers.py | 16 +++++++++++++++- utils/config_ops.py | 3 --- 3 files changed, 17 insertions(+), 25 deletions(-) diff --git a/animation/numbers.py b/animation/numbers.py index 03fa3928..0b900642 100644 --- a/animation/numbers.py +++ b/animation/numbers.py @@ -1,9 +1,7 @@ - from constants import * from animation.animation import Animation -from mobject.numbers import DecimalNumber from utils.bezier import interpolate from utils.config_ops import digest_config @@ -19,15 +17,6 @@ class ChangingDecimal(Animation): def __init__(self, decimal_number_mobject, number_update_func, **kwargs): digest_config(self, kwargs, locals()) - self.decimal_number_config = dict( - decimal_number_mobject.initial_config - ) - for attr in "num_decimal_places", "show_ellipsis", "include_sign": - value = getattr(self, attr) - if value is not None: - self.decimal_number_config[attr] = value - if hasattr(self.decimal_number_mobject, "background_rectangle"): - self.decimal_number_config["include_background_rectangle"] = True if self.tracked_mobject: dmc = decimal_number_mobject.get_center() tmc = self.tracked_mobject.get_center() @@ -39,17 +28,9 @@ class ChangingDecimal(Animation): self.update_position() def update_number(self, alpha): - decimal = self.decimal_number_mobject - new_number = self.number_update_func(alpha) - new_decimal = DecimalNumber( - new_number, **self.decimal_number_config + self.decimal_number_mobject.set_value( + self.number_update_func(alpha) ) - new_decimal.match_height(decimal) - new_decimal.move_to(decimal) - new_decimal.match_style(decimal) - - decimal.submobjects = new_decimal.submobjects - decimal.number = new_number def update_position(self): if self.position_update_func is not None: diff --git a/mobject/numbers.py b/mobject/numbers.py index 6be4e76e..b89b7025 100644 --- a/mobject/numbers.py +++ b/mobject/numbers.py @@ -21,8 +21,8 @@ class DecimalNumber(VMobject): def __init__(self, number, **kwargs): VMobject.__init__(self, **kwargs) - # TODO, make this more ediable with a getter and setter self.number = number + self.initial_config = kwargs if isinstance(number, complex): formatter = self.get_complex_formatter() @@ -96,6 +96,20 @@ class DecimalNumber(VMobject): def get_complex_formatter(self, **kwargs): pass + def set_value(self, number, **config): + full_config = dict(self.initial_config) + full_config.update(config) + new_decimal = DecimalNumber(number, **full_config) + new_decimal.match_height(self) + new_decimal.move_to(self, LEFT) + new_decimal.match_style(self) + + self.submobjects = new_decimal.submobjects + self.number = number + + def get_value(self): + return self.number + class Integer(DecimalNumber): CONFIG = { diff --git a/utils/config_ops.py b/utils/config_ops.py index 2c1be372..ec6aa70f 100644 --- a/utils/config_ops.py +++ b/utils/config_ops.py @@ -55,9 +55,6 @@ def digest_config(obj, kwargs, caller_locals={}): all_dicts += static_configs all_new_dicts = [kwargs, caller_locals] + static_configs obj.__dict__ = merge_config(all_dicts) - # Keep track of the configuration of objects upon - # instantiation - obj.initial_config = merge_config(all_new_dicts) def merge_config(all_dicts):