From 581228b08f8bbd31fb0386e46860d76b79a6af98 Mon Sep 17 00:00:00 2001 From: Grant Sanderson Date: Fri, 22 Apr 2022 08:33:57 -0700 Subject: [PATCH] Have scene keep track of a map from mobject ids to mobjects for all it's ever seen --- manimlib/scene/scene.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/manimlib/scene/scene.py b/manimlib/scene/scene.py index 4303d737..a540cd09 100644 --- a/manimlib/scene/scene.py +++ b/manimlib/scene/scene.py @@ -76,6 +76,7 @@ class Scene(object): self.camera: Camera = self.camera_class(**self.camera_config) self.file_writer = SceneFileWriter(self, **self.file_writer_config) self.mobjects: list[Mobject] = [self.camera.frame] + self.id_to_mobject_map: dict[int, Mobject] = dict() self.num_plays: int = 0 self.time: float = 0 self.skip_time: float = 0 @@ -263,6 +264,11 @@ class Scene(object): """ self.remove(*new_mobjects) self.mobjects += new_mobjects + self.id_to_mobject_map.update({ + id(sm): sm + for m in new_mobjects + for sm in m.get_family() + }) return self def add_mobjects_among(self, values: Iterable): @@ -326,11 +332,7 @@ class Scene(object): return Group(*mobjects) def id_to_mobject(self, id_value): - for mob in self.mobjects: - for sm in mob.get_family(): - if id(sm) == id_value: - return sm - return None + return self.id_to_mobject_map[id_value] def ids_to_group(self, *id_values): return self.get_group(*filter(