annotate flax/Show.py @ 15:c76b62eccdec

put **kw back in, they now go to the scale and can override the defaults. put **kw back in, they now go to the scale and can override the defaults. for our purposes, we probably want to edit the defaults so we don't have them in every call.
author dmcc
date Sun, 07 Jul 2002 06:18:40 +0000
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