Fixed Mobject.copy to be more efficient and fault taulerent

This commit is contained in:
Grant Sanderson
2017-10-03 11:49:48 -07:00
parent 7f88a9dae1
commit 6fac1a578c
2 changed files with 16 additions and 13 deletions

View File

@ -100,7 +100,7 @@ class Swap(CyclicReplace):
class GrowFromPoint(Transform):
def __init__(self, mobject, point, **kwargs):
target = mobject.deepcopy()
target = mobject.copy()
point_mob = Point(point)
mobject.replace(point_mob)
mobject.highlight(point_mob.get_color())
@ -143,7 +143,7 @@ class ApplyMethod(Transform):
)
assert(isinstance(method.im_self, Mobject))
method_kwargs = kwargs.get("method_kwargs", {})
target = method.im_self.deepcopy()
target = method.im_self.copy()
method.im_func(target, *args, **method_kwargs)
Transform.__init__(self, method.im_self, target, **kwargs)
@ -165,7 +165,7 @@ class FadeOut(Transform):
class FadeIn(Transform):
def __init__(self, mobject, **kwargs):
target = mobject.deepcopy()
target = mobject.copy()
Transform.__init__(self, mobject, target, **kwargs)
self.starting_mobject.fade(1)
if isinstance(self.starting_mobject, VMobject):
@ -232,7 +232,6 @@ class Rotate(ApplyMethod):
)
Transform.__init__(self, mobject, target, **kwargs)
class ApplyPointwiseFunction(ApplyMethod):
CONFIG = {
"run_time" : DEFAULT_POINTWISE_FUNCTION_RUN_TIME
@ -258,7 +257,7 @@ class ApplyFunction(Transform):
Transform.__init__(
self,
mobject,
function(mobject.deepcopy()),
function(mobject.copy()),
**kwargs
)
self.name = "ApplyFunctionTo"+str(mobject)

View File

@ -102,13 +102,17 @@ class Mobject(object):
def copy(self):
#TODO, either justify reason for shallow copy, or
#remove this redundancy everywhere
return self.deepcopy()
# copy_mobject = copy.copy(self)
# copy_mobject.points = np.array(self.points)
# copy_mobject.submobjects = [
# submob.copy() for submob in self.submobjects
# ]
# return copy_mobject
# return self.deepcopy()
copy_mobject = copy.copy(self)
copy_mobject.points = np.array(self.points)
copy_mobject.submobjects = [
submob.copy() for submob in self.submobjects
]
family = self.submobject_family()
for attr, value in self.__dict__.items():
if isinstance(value, Mobject) and value in family and value is not self:
setattr(copy_mobject, attr, value.copy())
return copy_mobject
def deepcopy(self):
return copy.deepcopy(self)
@ -443,7 +447,7 @@ class Mobject(object):
if hasattr(self, "saved_state"):
#Prevent exponential growth of data
self.saved_state = None
self.saved_state = self.deepcopy()
self.saved_state = self.copy()
return self
def restore(self):