From 50f5d20cc379947d7253d841c060dd7c55fa7787 Mon Sep 17 00:00:00 2001 From: Grant Sanderson Date: Wed, 20 Apr 2022 21:42:59 -0700 Subject: [PATCH] Allow for saving and loading mobjects from file --- manimlib/mobject/mobject.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/manimlib/mobject/mobject.py b/manimlib/mobject/mobject.py index ec023a9c..eedb5ff6 100644 --- a/manimlib/mobject/mobject.py +++ b/manimlib/mobject/mobject.py @@ -6,6 +6,8 @@ import random import itertools as it from functools import wraps from typing import Iterable, Callable, Union, Sequence +import pickle +import os import colour import moderngl @@ -37,6 +39,7 @@ from manimlib.shader_wrapper import get_colormap_code from manimlib.event_handler import EVENT_DISPATCHER from manimlib.event_handler.event_listner import EventListner from manimlib.event_handler.event_type import EventType +from manimlib.logger import log TimeBasedUpdater = Callable[["Mobject", float], None] @@ -545,6 +548,27 @@ class Mobject(object): self.become(self.saved_state) return self + def save_to_file(self, file_path): + if not file_path.endswith(".mob"): + file_path += ".mob" + if os.path.exists(file_path): + cont = input(f"{file_path} already exists. Overwrite (y/n)? ") + if cont != "y": + return + with open(file_path, "wb") as fp: + pickle.dump(self, fp) + log.info(f"Saved mobject to {file_path}") + return self + + @staticmethod + def load(file_path): + if not os.path.exists(file_path): + log.error(f"No file found at {file_path}") + sys.exit(2) + with open(file_path, "rb") as fp: + mobject = pickle.load(fp) + return mobject + # Updating def init_updaters(self):