From 77ce17679c1ec6e85484f33a56b1e7900ed3c785 Mon Sep 17 00:00:00 2001 From: Grant Sanderson Date: Mon, 9 Aug 2021 15:42:32 -0700 Subject: [PATCH 1/2] Change back to simpler Mobject.scale implementation --- manimlib/mobject/mobject.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/manimlib/mobject/mobject.py b/manimlib/mobject/mobject.py index 1568734e..2454dbf3 100644 --- a/manimlib/mobject/mobject.py +++ b/manimlib/mobject/mobject.py @@ -572,18 +572,12 @@ class Mobject(object): respect to that point. """ scale_factor = max(scale_factor, min_scale_factor) - if about_point is None and about_edge is not None: - about_point = self.get_bounding_box_point(about_edge) - if recurse: - for submob in self.submobjects: - submob.scale(scale_factor, about_point=about_point, recurse=True) - if not self.submobjects: - self.apply_points_function( - lambda points: scale_factor * points, - works_on_bounding_box=True, - about_point=about_point, - about_edge=about_edge - ) + self.apply_points_function( + lambda points: scale_factor * points, + about_point=about_point, + about_edge=about_edge, + works_on_bounding_box=True, + ) return self def stretch(self, factor, dim, **kwargs): From e15133467588869c2f42b29b70f4099be463c835 Mon Sep 17 00:00:00 2001 From: Grant Sanderson Date: Mon, 9 Aug 2021 16:06:19 -0700 Subject: [PATCH 2/2] Alternate fix to Decimal scaling issue --- manimlib/mobject/mobject.py | 9 ++++++++- manimlib/mobject/numbers.py | 4 +--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/manimlib/mobject/mobject.py b/manimlib/mobject/mobject.py index 679ddece..79b489de 100644 --- a/manimlib/mobject/mobject.py +++ b/manimlib/mobject/mobject.py @@ -561,7 +561,7 @@ class Mobject(object): ) return self - def scale(self, scale_factor, min_scale_factor=1e-8, about_point=None, about_edge=ORIGIN, recurse=True): + def scale(self, scale_factor, min_scale_factor=1e-8, about_point=None, about_edge=ORIGIN): """ Default behavior is to scale about the center of the mobject. The argument about_edge can be a vector, indicating which side of @@ -572,6 +572,8 @@ class Mobject(object): respect to that point. """ scale_factor = max(scale_factor, min_scale_factor) + for mob in self.get_family(): + mob._handle_scale_side_effects(scale_factor) self.apply_points_function( lambda points: scale_factor * points, about_point=about_point, @@ -580,6 +582,11 @@ class Mobject(object): ) return self + def _handle_scale_side_effects(self, scale_factor): + # In case subclasses, such as DecimalNumber, need to make + # any other changes when the size gets altered + pass + def stretch(self, factor, dim, **kwargs): def func(points): points[:, dim] *= factor diff --git a/manimlib/mobject/numbers.py b/manimlib/mobject/numbers.py index 34d1fa6c..a1949f51 100644 --- a/manimlib/mobject/numbers.py +++ b/manimlib/mobject/numbers.py @@ -135,10 +135,8 @@ class DecimalNumber(VMobject): sm1.match_style(sm2) return self - def scale(self, scale_factor, **kwargs): - super().scale(scale_factor, **kwargs) + def _handle_scale_side_effects(self, scale_factor): self.data["font_size"] *= scale_factor - return self def get_value(self): return self.number