Allow for saving and loading mobjects from file

This commit is contained in:
Grant Sanderson
2022-04-20 21:42:59 -07:00
parent 2dd2fb500e
commit 50f5d20cc3

View File

@ -6,6 +6,8 @@ import random
import itertools as it import itertools as it
from functools import wraps from functools import wraps
from typing import Iterable, Callable, Union, Sequence from typing import Iterable, Callable, Union, Sequence
import pickle
import os
import colour import colour
import moderngl 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 import EVENT_DISPATCHER
from manimlib.event_handler.event_listner import EventListner from manimlib.event_handler.event_listner import EventListner
from manimlib.event_handler.event_type import EventType from manimlib.event_handler.event_type import EventType
from manimlib.logger import log
TimeBasedUpdater = Callable[["Mobject", float], None] TimeBasedUpdater = Callable[["Mobject", float], None]
@ -545,6 +548,27 @@ class Mobject(object):
self.become(self.saved_state) self.become(self.saved_state)
return self 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 # Updating
def init_updaters(self): def init_updaters(self):