Update Decimal number changing

This commit is contained in:
Grant Sanderson
2018-08-12 19:05:31 -07:00
parent 3ba33d543e
commit 9e534fb78f
3 changed files with 17 additions and 25 deletions

View File

@ -1,9 +1,7 @@
from constants import * from constants import *
from animation.animation import Animation from animation.animation import Animation
from mobject.numbers import DecimalNumber
from utils.bezier import interpolate from utils.bezier import interpolate
from utils.config_ops import digest_config from utils.config_ops import digest_config
@ -19,15 +17,6 @@ class ChangingDecimal(Animation):
def __init__(self, decimal_number_mobject, number_update_func, **kwargs): def __init__(self, decimal_number_mobject, number_update_func, **kwargs):
digest_config(self, kwargs, locals()) 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: if self.tracked_mobject:
dmc = decimal_number_mobject.get_center() dmc = decimal_number_mobject.get_center()
tmc = self.tracked_mobject.get_center() tmc = self.tracked_mobject.get_center()
@ -39,17 +28,9 @@ class ChangingDecimal(Animation):
self.update_position() self.update_position()
def update_number(self, alpha): def update_number(self, alpha):
decimal = self.decimal_number_mobject self.decimal_number_mobject.set_value(
new_number = self.number_update_func(alpha) self.number_update_func(alpha)
new_decimal = DecimalNumber(
new_number, **self.decimal_number_config
) )
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): def update_position(self):
if self.position_update_func is not None: if self.position_update_func is not None:

View File

@ -21,8 +21,8 @@ class DecimalNumber(VMobject):
def __init__(self, number, **kwargs): def __init__(self, number, **kwargs):
VMobject.__init__(self, **kwargs) VMobject.__init__(self, **kwargs)
# TODO, make this more ediable with a getter and setter
self.number = number self.number = number
self.initial_config = kwargs
if isinstance(number, complex): if isinstance(number, complex):
formatter = self.get_complex_formatter() formatter = self.get_complex_formatter()
@ -96,6 +96,20 @@ class DecimalNumber(VMobject):
def get_complex_formatter(self, **kwargs): def get_complex_formatter(self, **kwargs):
pass 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): class Integer(DecimalNumber):
CONFIG = { CONFIG = {

View File

@ -55,9 +55,6 @@ def digest_config(obj, kwargs, caller_locals={}):
all_dicts += static_configs all_dicts += static_configs
all_new_dicts = [kwargs, caller_locals] + static_configs all_new_dicts = [kwargs, caller_locals] + static_configs
obj.__dict__ = merge_config(all_dicts) 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): def merge_config(all_dicts):