annotate flax/Show.py @ 2435:207fe0670952

+ bin/rdf2dot
author drewp@bigasterisk.com
date Wed, 29 May 2024 14:56:58 -0700
parents 45b12307c695
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 from Timeline import *
45b12307c695 Initial revision
drewp
parents:
diff changeset
2 from Submaster import Submasters, sub_maxes
45b12307c695 Initial revision
drewp
parents:
diff changeset
3
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 class Show:
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 def __init__(self, timelines, submasters):
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 self.timelines = dict([(timeline.name, timeline)
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 for timeline in timelines])
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 self.submasters = submasters
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 self.current_timeline = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 self.current_time = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 def calc_active_submaster(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 "get levels from the current timeline at the current time"
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 if not (self.current_timeline or self.current_time):
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 return {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 tl = self.current_timeline
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 tl.set_time(self.current_time)
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 levels = tl.get_levels()
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 scaledsubs = [self.submasters.get_sub_by_name(sub) * level \
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 for sub, level in levels.items()]
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 maxes = sub_maxes(*scaledsubs)
45b12307c695 Initial revision
drewp
parents:
diff changeset
21
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 return maxes
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 def set_timeline(self, name):
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 "select a timeline"
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 self.current_timeline = self.timelines.get(name)
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 if not self.current_timeline:
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 print "Show: '%s' is not the name of a timeline." % name
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 self.set_time(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 def set_time(self, time):
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 "set time of current timeline"
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 self.current_time = time
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 if not self.current_timeline:
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 self.current_timeline.set_time(time)
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 def get_timelines(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 "Get names of all timelines"
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 return self.timelines.keys()
45b12307c695 Initial revision
drewp
parents:
diff changeset
39
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 # this is the default blender
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 linear = LinearBlender()
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 def T(time, level, **kw):
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 """This used to be a synonym for TimedEvent:
45b12307c695 Initial revision
drewp
parents:
diff changeset
44
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 T = TimedEvent
45b12307c695 Initial revision
drewp
parents:
diff changeset
46
45b12307c695 Initial revision
drewp
parents:
diff changeset
47 It now acts in a similar way, except that it will fill in a default
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 blender if you don't. The default blender is a LinearBlender. It also
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 sets frame to MISSING so the track can fill it in."""
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 if 'blender' not in kw:
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 global linear
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 kw['blender'] = linear
45b12307c695 Initial revision
drewp
parents:
diff changeset
53
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 return TimedEvent(time, level=level, frame=MISSING, **kw)
45b12307c695 Initial revision
drewp
parents:
diff changeset
55
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 def translate_tracks_from_file(timelinename):
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 f = open('timelines/' + timelinename)
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 except IOError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 return []
45b12307c695 Initial revision
drewp
parents:
diff changeset
61
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 events = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 current_sub = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 current_time = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 lines = f.readlines()
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 alltext = ' '.join(lines)
45b12307c695 Initial revision
drewp
parents:
diff changeset
67
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 for token in alltext.split():
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 # print 't', token
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 if token.endswith(':'):
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 # print 'sub'
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 current_sub = token[:-1]
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 current_time = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 if not current_sub:
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 raise "invalid file format", line
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 if current_time is not None: # we now have a level
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 # print 'level'
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 level = float(token)
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 except:
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 print "bad level token", token
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 level = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 # time to write
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 events.setdefault(current_sub, [])
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 events[current_sub].append((current_time, level))
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 current_time = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 # print 'time'
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 current_time = float(token)
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 except ValueError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 print "bad time token", token
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 current_time = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
95
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 tracks = []
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 for sub, timelevels in events.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 tracks.append(TimelineTrack(sub, default_frame=sub,
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 *[T(time, level) for time, level in timelevels]))
45b12307c695 Initial revision
drewp
parents:
diff changeset
100
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 return tracks
45b12307c695 Initial revision
drewp
parents:
diff changeset
102