mirror of
https://github.com/3b1b/manim.git
synced 2025-08-05 16:49:03 +00:00
preview timing improvements + imcorporated into script wrapper
This commit is contained in:
parent
b527568f5c
commit
4198581f8a
2 changed files with 23 additions and 18 deletions
|
@ -63,13 +63,14 @@ def find_scene_class_and_args(scene_string, args_extension,
|
|||
|
||||
def command_line_create_scene(sys_argv, scene_classes, movie_prefix = ""):
|
||||
try:
|
||||
opts, args = getopt.getopt(sys_argv, "ho:s:a:l")
|
||||
opts, args = getopt.getopt(sys_argv, "h:s:a:l:p")
|
||||
except getopt.GetoptError as err:
|
||||
print str(err)
|
||||
sys.exit(2)
|
||||
scene_string = ""
|
||||
args_extension = ""
|
||||
display_config = PRODUCTION_QUALITY_DISPLAY_CONFIG
|
||||
preview = False
|
||||
for opt, arg in opts:
|
||||
if opt == '-h':
|
||||
print HELP_MESSAGE
|
||||
|
@ -80,6 +81,9 @@ def command_line_create_scene(sys_argv, scene_classes, movie_prefix = ""):
|
|||
args_extension = arg
|
||||
elif opt == '-l':
|
||||
display_config = LOW_QUALITY_DISPLAY_CONFIG
|
||||
elif opt == '-p':
|
||||
display_config = LOW_QUALITY_DISPLAY_CONFIG
|
||||
preview = True
|
||||
if len(args) > 0:
|
||||
scene_string = args[0]
|
||||
if len(args) > 1:
|
||||
|
@ -92,6 +96,9 @@ def command_line_create_scene(sys_argv, scene_classes, movie_prefix = ""):
|
|||
name = SceneClass.__name__ + SceneClass.args_to_string(*args)
|
||||
print "Constructing %s..."%name
|
||||
scene = SceneClass(*args, display_config = display_config)
|
||||
if preview:
|
||||
scene.preview()
|
||||
else:
|
||||
scene.write_to_movie(movie_prefix + name)
|
||||
|
||||
|
||||
|
|
30
tk_scene.py
30
tk_scene.py
|
@ -1,6 +1,8 @@
|
|||
from scene import *
|
||||
import Tkinter
|
||||
from PIL import ImageTk, Image
|
||||
import itertools as it
|
||||
import time
|
||||
|
||||
class TkSceneRoot(Tkinter.Tk):
|
||||
def __init__(self, scene):
|
||||
|
@ -17,23 +19,19 @@ class TkSceneRoot(Tkinter.Tk):
|
|||
self.canvas.configure(background='black')
|
||||
self.canvas.place(x=-2,y=-2)
|
||||
|
||||
self.frame_index = 0
|
||||
self.num_frames = len(self.scene.frames)
|
||||
self.frame_duration_in_ms = int(1000*scene.frame_duration)
|
||||
# self.after(0,self.show_new_image)
|
||||
while(1):
|
||||
self.frame_index = 0
|
||||
self.show_new_image()
|
||||
last_time = time.time()
|
||||
for frame in it.cycle(self.scene.frames):
|
||||
try:
|
||||
self.show_new_image(frame)
|
||||
except:
|
||||
break
|
||||
sleep_time = self.scene.frame_duration
|
||||
sleep_time -= time.time() - last_time
|
||||
time.sleep(max(0, sleep_time))
|
||||
last_time = time.time()
|
||||
self.mainloop()
|
||||
|
||||
|
||||
|
||||
def show_new_image(self):
|
||||
self.frame_index += 1
|
||||
if self.frame_index >= self.num_frames:
|
||||
return
|
||||
frame = self.scene.frames[self.frame_index]
|
||||
|
||||
def show_new_image(self, frame):
|
||||
image = Image.fromarray(frame).convert('RGB')
|
||||
image.resize(self.frame.size())
|
||||
photo = ImageTk.PhotoImage(image)
|
||||
|
@ -42,5 +40,5 @@ class TkSceneRoot(Tkinter.Tk):
|
|||
0, 0,
|
||||
image = photo, anchor = Tkinter.NW
|
||||
)
|
||||
self.after(self.frame_duration_in_ms, self.show_new_image)
|
||||
# self.after(self.frame_duration_in_ms, self.show_new_image)
|
||||
self.update()
|
||||
|
|
Loading…
Add table
Reference in a new issue