tracksperanto 1.6.8 → 1.6.9

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 1.6.9 / 2010-01-20
2
+
3
+ * Make the commandline progress reports shorter
4
+
1
5
  === 1.6.8 / 2010-01-13
2
6
 
3
7
  * Fix frame gap handling for repeating gaps in the Nuke importer
data/Manifest.txt CHANGED
@@ -73,10 +73,10 @@ test/export/test_shake_export.rb
73
73
  test/export/test_syntheyes_export.rb
74
74
  test/helper.rb
75
75
  test/import/.DS_Store
76
- test/import/samples/.DS_Store
77
76
  test/import/samples/3de_v3/3de_export_v3.txt
78
77
  test/import/samples/3de_v4/3de_export_cube.txt
79
78
  test/import/samples/boujou_features_text/boujou_txt_export.txt
79
+ test/import/samples/flame_stabilizer/.DS_Store
80
80
  test/import/samples/flame_stabilizer/fromCombustion_fromMidClip_wSnap.stabilizer
81
81
  test/import/samples/flame_stabilizer/hugeFlameSetup.stabilizer
82
82
  test/import/samples/flame_stabilizer/megaTrack.action.3dtrack.stabilizer
@@ -88,7 +88,9 @@ test/import/samples/nuke/one_tracker_with_break_in_grp.nk
88
88
  test/import/samples/nuke/tracker_with_differing_gaps.nk
89
89
  test/import/samples/nuke/tracker_with_repeating_gaps.nk
90
90
  test/import/samples/pftrack4/sourcefile_pftrack.2dt
91
+ test/import/samples/pftrack5/.DS_Store
91
92
  test/import/samples/pftrack5/garage.2dt
93
+ test/import/samples/shake_script/.DS_Store
92
94
  test/import/samples/shake_script/four_tracks_in_one_matchmove.shk
93
95
  test/import/samples/shake_script/four_tracks_in_one_stabilizer.shk
94
96
  test/import/samples/shake_script/shake_script_from_boujou.shk
@@ -101,6 +103,8 @@ test/import/samples/shake_script/two_tracks_in_one_tracker.shk
101
103
  test/import/samples/shake_text/one_shake_tracker.txt
102
104
  test/import/samples/shake_text/one_shake_tracker_from_first.txt
103
105
  test/import/samples/shake_text/two_shake_trackers.txt
106
+ test/import/samples/syntheyes_2d_paths/.DS_Store
107
+ test/import/samples/syntheyes_2d_paths/cola_plate.txt
104
108
  test/import/samples/syntheyes_2d_paths/flyover2DP_syntheyes.txt
105
109
  test/import/samples/syntheyes_2d_paths/shake_tracker_nodes_to_syntheyes.txt
106
110
  test/import/test_3de_import.rb
data/bin/tracksperanto CHANGED
@@ -88,8 +88,25 @@ if !input_file
88
88
  exit(-1)
89
89
  end
90
90
 
91
+ class Spinner
92
+ RING = ['|', '/', '-', '\\', '|', '/', '-', '\\']
93
+
94
+ def initialize
95
+ @counter = 0
96
+ @last_message_length = 0
97
+ end
98
+
99
+ def spin(percent, msg)
100
+ current = RING[(@counter += 1) % RING.length]
101
+ output = " [%s %d%%]" % [current, percent]
102
+ STDOUT.write(output + "\r" * output.length)
103
+ STDOUT.flush
104
+ end
105
+ end
106
+
91
107
  pipe = Tracksperanto::Pipeline::Base.new
92
- pipe.progress_block = lambda{|percent, msg| STDOUT.write(".") }
108
+ pipe.progress_block = Spinner.new.method(:spin).to_proc
109
+
93
110
  if sole_format
94
111
  begin
95
112
  pipe.exporters = [Tracksperanto::Export.const_get(sole_format)]
@@ -110,4 +127,4 @@ pipe.run(input_file, :pix_w => width, :pix_h => height, :parser => reader_klass)
110
127
  shift.y_shift = y_shift
111
128
  prefix.prefix = set_prefix
112
129
  end
113
- STDOUT.write("\n")
130
+ STDOUT.puts("\rConverted #{pipe.converted_points} trackers with #{pipe.converted_keyframes} keys")
@@ -1,55 +1,60 @@
1
1
  module Tracksperanto::ShakeGrammar
2
2
  # Will replay funcalls through to methods if such methods exist in the public insntance
3
3
  class Catcher < Lexer
4
-
5
- def push(atom_array)
6
- atom_name = atom_array[0]
7
- if atom_name == :funcall
8
- func, funcargs = atom_array[1], atom_array[2..-1]
9
- meth_for_shake_func = func.downcase
10
- if can_handle_meth?(meth_for_shake_func)
11
- super([:retval, exec_funcall(meth_for_shake_func, funcargs)])
12
- else
13
- # This is a funcall we cannot perform, replace the return result of the funcall
14
- # with a token to signify that some unknown function's result would have been here
15
- super(:unknown_func)
16
- end
17
- elsif atom_name == :comment
18
- # Skip comments
4
+ class At
5
+ attr_accessor :at, :value
6
+ include Comparable
7
+ def initialize(a, v)
8
+ @at, @value = a, v
9
+ end
10
+
11
+ def <=>(o)
12
+ [@at, @value] <=> [o.at, o.value]
13
+ end
14
+
15
+ def inspect
16
+ "(#{@value.inspect}@#{@at.inspect})"
17
+ end
18
+ end
19
+
20
+ def push(atom)
21
+ # Send primitive types to parent
22
+ return super if !atom.is_a?(Array)
23
+ return super if atom[0] != :funcall
24
+
25
+ meth_for_shake_func, args = atom[1].downcase, atom[2..-1]
26
+ if can_handle_meth?(meth_for_shake_func)
27
+ super([:retval, exec_funcall(meth_for_shake_func, args)])
19
28
  else
20
- super
29
+ # This is a funcall we cannot perform, replace the return result of the funcall
30
+ # with a token to signify that some unknown function's result would have been here
31
+ super([:unknown_func])
21
32
  end
22
33
  end
23
34
 
24
35
  private
25
36
 
26
- def get_variable_name
27
- @stack[-2][1]
28
- end
29
-
30
37
  def can_handle_meth?(m)
31
38
  @meths ||= self.class.public_instance_methods(false)
32
39
  @meths.include?(m)
33
40
  end
34
41
 
35
42
  def exec_funcall(methname, args)
36
- ruby_args = unwrap_atoms_in_args(args)
43
+ ruby_args = args.map {|a| unwrap_atom(a) }
37
44
  send(methname, *ruby_args)
38
45
  end
39
46
 
40
- def unwrap_atoms_in_args(args)
41
- args.map do | arg |
42
- (arg.is_a?(Array) && arg[0].is_a?(Symbol)) ? unwrap_atom(arg) : arg
43
- end
44
- end
45
-
46
47
  def unwrap_atom(atom)
48
+ return atom unless atom.is_a?(Array)
49
+
47
50
  kind = atom.shift
48
51
  case kind
49
52
  when :arr
50
- atom.map{|e| unwrap_atom(e)}
51
- when :retval, :atom_i, :atom_c, :atom_f, :atom_at_i, :atom_at_f
53
+ atom[0].map{|e| unwrap_atom(e)}
54
+ when :retval
52
55
  atom.shift
56
+ when :value_at
57
+ At.new(atom.shift, unwrap_atom(atom.shift))
53
58
  else
54
59
  :unknown
55
60
  end
@@ -15,8 +15,8 @@ module Tracksperanto::ShakeGrammar
15
15
  # The second argument is a "sentinel" that is going to be passed
16
16
  # to the downstream lexers instantiated for nested data structures.
17
17
  # You can use the sentinel to collect data from child nodes for example.
18
- def initialize(with_io, sentinel = nil)
19
- @io, @stack, @buf, @sentinel = with_io, [], '', sentinel
18
+ def initialize(with_io, sentinel = nil, limit_to_one_stmt = false)
19
+ @io, @stack, @buf, @sentinel, @limit_to_one_stmt = with_io, [], '', sentinel, @limit_to_one_stmt
20
20
  catch(STOP_TOKEN) { parse until @io.eof? }
21
21
  in_comment? ? consume_comment("\n") : consume_atom!
22
22
  end
@@ -44,19 +44,20 @@ module Tracksperanto::ShakeGrammar
44
44
  push([:funcall, @buf.strip] + self.class.new(@io, @sentinel).stack)
45
45
  @buf = ''
46
46
  elsif c == "[" # Array, booring
47
- push([:arr] + self.class.new(@io).stack)
48
- elsif (c == "]" || c == ")")
49
- # Funcall end, and when it happens assume we are called as
50
- # a subexpression.
47
+ push([:arr, self.class.new(@io).stack])
48
+ elsif (c == "]" || c == ")" || c == ";" && @limit_to_one_stmt)
49
+ # Bailing out of a subexpression
51
50
  consume_atom!
52
51
  throw STOP_TOKEN
53
52
  elsif (c == ",")
54
53
  consume_atom!
54
+ elsif (c == "@")
55
+ consume_atom!
56
+ @buf << c
55
57
  elsif (c == ";" || c == "\n")
56
58
  # Skip these - the subexpression already is expanded anyway
57
59
  elsif (c == "=")
58
- push [:var, @buf.strip]
59
- push [:eq]
60
+ push [:assign, @buf.strip, self.class.new(@io, @sentinel, to_semicolon = true).stack.shift]
60
61
  @buf = ''
61
62
  else
62
63
  @buf << c
@@ -66,9 +67,7 @@ module Tracksperanto::ShakeGrammar
66
67
  INT_ATOM = /^(\d+)$/
67
68
  FLOAT_ATOM = /^([\-\d\.]+)$/
68
69
  STR_ATOM = /^\"/
69
- AT_ATOM = /^([\-\d\.]+)@([\-\d\.]+)$/
70
- AT_CONSUMED = /^@(\d+)/
71
- VAR_ASSIGN = /^([\w_]+)(\s+?)\=(\s+?)(.+)/
70
+ AT_FRAME = /^@(\d+)/
72
71
 
73
72
  # Grab the minimum atomic value
74
73
  def consume_atom!
@@ -77,16 +76,17 @@ module Tracksperanto::ShakeGrammar
77
76
 
78
77
  the_atom = case at
79
78
  when INT_ATOM
80
- [:atom_i, at.to_i]
79
+ at.to_i
81
80
  when STR_ATOM
82
- [:atom_c, unquote_s(at)]
81
+ unquote_s(at)
83
82
  when FLOAT_ATOM
84
- [:atom_f, at.to_f]
85
- when AT_ATOM
86
- v, f = at.strip.split("@")
87
- [[:atom_f, v.to_f], [:atom_at_i, f.to_i]]
88
- when AT_CONSUMED
89
- [:atom_at_i, $1.to_i]
83
+ at.to_f
84
+ when AT_FRAME
85
+ if $1.include?(".")
86
+ [:value_at, $1.to_f, @stack.pop]
87
+ else
88
+ [:value_at, $1.to_i, @stack.pop]
89
+ end
90
90
  else
91
91
  [:atom, at]
92
92
  end
@@ -1,6 +1,5 @@
1
1
  require File.dirname(__FILE__) + "/shake_grammar/lexer"
2
2
  require File.dirname(__FILE__) + "/shake_grammar/catcher"
3
-
4
3
  class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
5
4
 
6
5
  def self.human_name
@@ -16,13 +15,23 @@ class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
16
15
  class Traxtractor < Tracksperanto::ShakeGrammar::Catcher
17
16
  include Tracksperanto::ZipTuples
18
17
 
18
+ # Normally, we wouldn't need to look for the variable name from inside of the funcall. However,
19
+ # in this case we DO want to take this shortcut so we will intersperse the data into the sentinel
20
+ def push(atom)
21
+ return super unless (atom.is_a?(Array) && atom[0] == :assign)
22
+ return super unless (atom[2][0] == :retval)
23
+ node_name = atom[1]
24
+ atom[2][1].map do | tracker |
25
+ tracker.name = [node_name, tracker.name].join("_")
26
+ sentinel[0].push(tracker)
27
+ end
28
+ end
29
+
19
30
  # For Linear() curve calls. If someone selected JSpline or Hermite it's his problem.
20
31
  # We put the frame number at the beginning since it works witih oru tuple zipper
21
32
  def linear(first_arg, *keyframes)
22
33
  report_progress("Translating Linear animation")
23
- keyframes.map do | kf |
24
- [kf[1][1], kf[0][1]]
25
- end
34
+ keyframes.map { |kf| [kf.at, kf.value] }
26
35
  end
27
36
  alias_method :nspline, :linear
28
37
  alias_method :jspline, :linear
@@ -33,9 +42,7 @@ class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
33
42
  # tangent positions (which we discard)
34
43
  def hermite(initial_value, *keyframes)
35
44
  report_progress("Translating Hermite curve, removing tangents")
36
- values, at_frames = keyframes.partition{|e| e.is_a?(Array)}
37
- values = values.map{|v| v[0] }
38
- at_frames.zip(values)
45
+ keyframes.map{ |kf| [kf.at, kf.value[0]] }
39
46
  end
40
47
 
41
48
  # image Tracker(
@@ -56,8 +63,7 @@ class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
56
63
  s3, s4, s5, s6, *trackers)
57
64
 
58
65
  report_progress("Parsing Tracker node")
59
- collect_trackers_from(get_variable_name, trackers)
60
- true
66
+ collect_trackers_from(trackers)
61
67
  end
62
68
 
63
69
  # stabilize {
@@ -98,11 +104,12 @@ class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
98
104
  *useless_args)
99
105
 
100
106
  report_progress("Parsing Stabilize node")
101
- node_name = get_variable_name
102
- collect_stabilizer_tracker("#{node_name}_track1", track1X, track1Y)
103
- collect_stabilizer_tracker("#{node_name}_track2", track2X, track2Y)
104
- collect_stabilizer_tracker("#{node_name}_track3", track3X, track3Y)
105
- collect_stabilizer_tracker("#{node_name}_track4", track4X, track4Y)
107
+ [
108
+ collect_stabilizer_tracker("track1", track1X, track1Y),
109
+ collect_stabilizer_tracker("track2", track2X, track2Y),
110
+ collect_stabilizer_tracker("track3", track3X, track3Y),
111
+ collect_stabilizer_tracker("track4", track4X, track4Y),
112
+ ].compact
106
113
  end
107
114
 
108
115
  # image = MatchMove(
@@ -164,12 +171,12 @@ class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
164
171
  track4Y, *others)
165
172
 
166
173
  report_progress("Parsing MatchMove node")
167
- node_name = get_variable_name
168
- collect_stabilizer_tracker("#{node_name}_track1", track1X, track1Y)
169
- collect_stabilizer_tracker("#{node_name}_track2", track2X, track2Y)
170
- collect_stabilizer_tracker("#{node_name}_track3", track3X, track3Y)
171
- collect_stabilizer_tracker("#{node_name}_track4", track4X, track4Y)
172
-
174
+ [
175
+ collect_stabilizer_tracker("track1", track1X, track1Y),
176
+ collect_stabilizer_tracker("track2", track2X, track2Y),
177
+ collect_stabilizer_tracker("track3", track3X, track3Y),
178
+ collect_stabilizer_tracker("track4", track4X, track4Y),
179
+ ].compact
173
180
  end
174
181
 
175
182
  private
@@ -178,15 +185,16 @@ class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
178
185
  sentinel[1].call(with_message) if sentinel[1]
179
186
  end
180
187
 
181
- def collect_trackers_from(name, array)
188
+ def collect_trackers_from(array)
182
189
  parameters_per_node = 16
183
190
  nb_trackers = array.length / parameters_per_node
184
- nb_trackers.times do | idx |
191
+
192
+ (0...nb_trackers).map do | idx |
185
193
  from_index, to_index = (idx * parameters_per_node), (idx+1) * parameters_per_node
186
194
  tracker_args = array[from_index...to_index]
187
- tracker_args[0] = "#{name}_#{tracker_args[0]}"
195
+ tracker_args[0] = "#{tracker_args[0]}"
188
196
  collect_tracker(*tracker_args)
189
- end
197
+ end.compact
190
198
  end
191
199
 
192
200
  def collect_stabilizer_tracker(name, x_curve, y_curve)
@@ -196,7 +204,7 @@ class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
196
204
  Tracksperanto::Keyframe.new(:frame => frame - 1, :abs_x => x, :abs_y => y)
197
205
  end
198
206
 
199
- push_tracker(:name => name, :keyframes => keyframes)
207
+ Tracksperanto::Tracker.new(:name => name, :keyframes => keyframes)
200
208
  end
201
209
 
202
210
  def collect_tracker(name, x_curve, y_curve, corr_curve, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12)
@@ -212,7 +220,8 @@ class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
212
220
  keyframes = zip_curve_tuples(*curve_set).map do | (frame, x, y, corr) |
213
221
  Tracksperanto::Keyframe.new(:frame => frame - 1, :abs_x => x, :abs_y => y, :residual => (1 - corr.to_f))
214
222
  end
215
- push_tracker(:name => name, :keyframes => keyframes)
223
+
224
+ Tracksperanto::Tracker.new(:name => name, :keyframes => keyframes)
216
225
  end
217
226
 
218
227
  def combine_curves(x, y, corr_curve)
@@ -220,10 +229,6 @@ class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
220
229
  curve_set << corr_curve if (corr_curve.respond_to?(:length) && corr_curve.length >= x.length)
221
230
  curve_set
222
231
  end
223
-
224
- def push_tracker(tracker_options)
225
- sentinel[0].push(Tracksperanto::Tracker.new(tracker_options))
226
- end
227
232
  end
228
233
 
229
234
  def parse(script_io)
data/lib/tracksperanto.rb CHANGED
@@ -4,7 +4,7 @@ require 'tempfile'
4
4
 
5
5
  module Tracksperanto
6
6
  PATH = File.expand_path(File.dirname(__FILE__))
7
- VERSION = '1.6.8'
7
+ VERSION = '1.6.9'
8
8
 
9
9
  module Import; end
10
10
  module Export; end
@@ -0,0 +1,507 @@
1
+ Tracker1 1 -0.067728 -0.244922 15
2
+ Tracker1 2 -0.065092 -0.248918 7
3
+ Tracker1 3 -0.061274 -0.253124 7
4
+ Tracker1 4 -0.055394 -0.256618 7
5
+ Tracker1 5 -0.048073 -0.262960 15
6
+ Tracker1 6 -0.042904 -0.269560 7
7
+ Tracker1 7 -0.037195 -0.278492 7
8
+ Tracker1 8 -0.031419 -0.288363 7
9
+ Tracker1 9 -0.027346 -0.298331 15
10
+ Tracker1 10 -0.024634 -0.314515 7
11
+ Tracker1 11 -0.021860 -0.334771 7
12
+ Tracker1 12 -0.015471 -0.354578 7
13
+ Tracker1 13 -0.005099 -0.369133 15
14
+ Tracker1 14 0.006652 -0.377567 7
15
+ Tracker1 15 0.021430 -0.382522 7
16
+ Tracker1 16 0.035294 -0.381879 7
17
+ Tracker1 17 0.046980 -0.378211 15
18
+ Tracker1 18 0.057851 -0.369336 7
19
+ Tracker1 19 0.066472 -0.355507 7
20
+ Tracker1 20 0.072426 -0.341769 7
21
+ Tracker1 21 0.077078 -0.326155 15
22
+ Tracker1 22 0.081291 -0.303653 7
23
+ Tracker1 23 0.084823 -0.278559 7
24
+ Tracker1 24 0.089269 -0.252325 7
25
+ Tracker1 25 0.092921 -0.227917 15
26
+ Tracker1 26 0.095902 -0.205260 7
27
+ Tracker1 27 0.097859 -0.178534 7
28
+ Tracker1 28 0.099102 -0.157861 7
29
+ Tracker1 29 0.099112 -0.146786 15
30
+ Tracker1 30 0.096569 -0.137900 7
31
+ Tracker1 31 0.090730 -0.126783 7
32
+ Tracker1 32 0.083118 -0.116885 7
33
+ Tracker1 33 0.075267 -0.112504 15
34
+ Tracker1 34 0.066921 -0.111124 7
35
+ Tracker1 35 0.057518 -0.109734 7
36
+ Tracker1 36 0.047113 -0.108005 7
37
+ Tracker1 37 0.038916 -0.109653 15
38
+ Tracker1 38 0.032049 -0.106238 7
39
+ Tracker1 39 0.024634 -0.105814 7
40
+ Tracker1 40 0.016158 -0.115710 7
41
+ Tracker1 41 0.008868 -0.122354 15
42
+ Tracker1 42 0.001930 -0.125853 7
43
+ Tracker1 43 -0.008011 -0.134011 7
44
+ Tracker1 44 -0.020194 -0.145578 7
45
+ Tracker1 45 -0.030089 -0.149569 15
46
+ Tracker1 46 -0.036715 -0.150612 7
47
+ Tracker1 47 -0.045108 -0.162176 7
48
+ Tracker1 48 -0.055350 -0.182660 7
49
+ Tracker1 49 -0.062872 -0.197860 15
50
+ Tracker1 50 -0.070143 -0.209065 7
51
+ Tracker1 51 -0.076469 -0.218782 7
52
+ Tracker1 52 -0.082360 -0.223616 7
53
+ Tracker1 53 -0.087896 -0.221405 15
54
+ Tracker1 54 -0.092179 -0.221210 7
55
+ Tracker1 55 -0.093786 -0.225442 7
56
+ Tracker1 56 -0.093674 -0.231370 7
57
+ Tracker1 57 -0.091309 -0.236894 15
58
+ Tracker1 58 -0.087306 -0.245727 7
59
+ Tracker1 59 -0.082585 -0.256422 7
60
+ Tracker1 60 -0.076795 -0.262368 7
61
+ Tracker1 61 -0.069782 -0.264465 15
62
+ Tracker1 62 -0.062027 -0.268350 7
63
+ Tracker1 63 -0.053783 -0.275351 7
64
+ Tracker1 64 -0.046572 -0.282203 15
65
+ Tracker1 65 -0.040293 -0.289319 15
66
+ Tracker1 66 -0.033932 -0.295479 7
67
+ Tracker1 67 -0.027062 -0.301713 7
68
+ Tracker1 68 -0.020827 -0.305950 7
69
+ Tracker1 69 -0.015612 -0.309020 15
70
+ Tracker1 70 -0.010550 -0.311432 7
71
+ Tracker1 71 -0.005233 -0.313427 7
72
+ Tracker1 72 0.000407 -0.316988 7
73
+ Tracker1 73 0.005536 -0.321569 15
74
+ Tracker1 74 0.009427 -0.324740 7
75
+ Tracker1 75 0.012756 -0.326649 7
76
+ Tracker1 76 0.015964 -0.325775 7
77
+ Tracker1 77 0.019278 -0.321473 15
78
+ Tracker1 78 0.022801 -0.313456 7
79
+ Tracker1 79 0.025893 -0.303735 7
80
+ Tracker1 80 0.029509 -0.289082 7
81
+ Tracker1 81 0.033518 -0.273040 15
82
+ Tracker1 82 0.037421 -0.258148 7
83
+ Tracker1 83 0.042987 -0.238133 7
84
+ Tracker1 84 0.048976 -0.218023 7
85
+ Tracker1 85 0.052717 -0.202492 15
86
+ Tracker1 86 0.054408 -0.188551 7
87
+ Tracker1 87 0.053590 -0.173082 7
88
+ Tracker1 88 0.051640 -0.157542 7
89
+ Tracker1 89 0.050031 -0.147129 15
90
+ Tracker1 90 0.048104 -0.140582 7
91
+ Tracker1 91 0.045298 -0.133807 7
92
+ Tracker1 92 0.041905 -0.125346 7
93
+ Tracker1 93 0.037303 -0.117299 15
94
+ Tracker1 94 0.032822 -0.109178 7
95
+ Tracker1 95 0.028124 -0.102662 7
96
+ Tracker1 96 0.021886 -0.093605 7
97
+ Tracker1 97 0.015960 -0.084248 15
98
+ Tracker1 98 0.010394 -0.076664 7
99
+ Tracker1 99 0.006031 -0.069808 7
100
+ Tracker1 100 0.002186 -0.063330 7
101
+ Tracker2 1 -0.187530 0.092809 15
102
+ Tracker2 2 -0.188390 0.092113 7
103
+ Tracker2 3 -0.189431 0.090039 7
104
+ Tracker2 4 -0.189932 0.086936 7
105
+ Tracker2 5 -0.189324 0.082121 15
106
+ Tracker2 6 -0.187994 0.079106 7
107
+ Tracker2 7 -0.187719 0.072390 7
108
+ Tracker2 8 -0.187472 0.063869 7
109
+ Tracker2 9 -0.186545 0.056708 15
110
+ Tracker2 10 -0.185774 0.045121 7
111
+ Tracker2 11 -0.185183 0.030349 7
112
+ Tracker2 12 -0.181522 0.014829 7
113
+ Tracker2 13 -0.174638 0.001514 15
114
+ Tracker2 14 -0.166195 -0.008196 7
115
+ Tracker2 15 -0.155120 -0.016212 7
116
+ Tracker2 16 -0.144640 -0.019282 7
117
+ Tracker2 17 -0.135997 -0.019176 15
118
+ Tracker2 18 -0.127085 -0.013874 7
119
+ Tracker2 19 -0.120724 -0.004017 7
120
+ Tracker2 20 -0.117513 0.003663 7
121
+ Tracker2 21 -0.115506 0.012046 15
122
+ Tracker2 22 -0.115174 0.026439 7
123
+ Tracker2 23 -0.115920 0.040139 7
124
+ Tracker2 24 -0.116065 0.054054 7
125
+ Tracker2 25 -0.115702 0.068055 15
126
+ Tracker2 26 -0.115165 0.080755 7
127
+ Tracker2 27 -0.116403 0.093857 7
128
+ Tracker2 28 -0.117641 0.102968 7
129
+ Tracker2 29 -0.118357 0.107271 15
130
+ Tracker2 30 -0.121236 0.110953 7
131
+ Tracker2 31 -0.127097 0.113671 7
132
+ Tracker2 32 -0.133879 0.115968 7
133
+ Tracker2 33 -0.140310 0.115766 15
134
+ Tracker2 34 -0.145990 0.114622 7
135
+ Tracker2 35 -0.151639 0.114385 7
136
+ Tracker2 36 -0.156351 0.116809 7
137
+ Tracker2 37 -0.158713 0.117649 15
138
+ Tracker2 38 -0.160568 0.121628 7
139
+ Tracker2 39 -0.162350 0.124060 7
140
+ Tracker2 40 -0.163378 0.121101 7
141
+ Tracker2 41 -0.164110 0.119711 15
142
+ Tracker2 42 -0.165249 0.119573 7
143
+ Tracker2 43 -0.166629 0.119106 7
144
+ Tracker2 44 -0.168070 0.118105 7
145
+ Tracker2 45 -0.170381 0.119801 15
146
+ Tracker2 46 -0.172021 0.122960 7
147
+ Tracker2 47 -0.172491 0.123479 7
148
+ Tracker2 48 -0.172611 0.121046 7
149
+ Tracker2 49 -0.173075 0.119547 15
150
+ Tracker2 50 -0.173455 0.119267 7
151
+ Tracker2 51 -0.173791 0.119005 7
152
+ Tracker2 52 -0.174159 0.121170 7
153
+ Tracker2 53 -0.175400 0.128414 15
154
+ Tracker2 54 -0.176260 0.134097 7
155
+ Tracker2 55 -0.176486 0.135195 7
156
+ Tracker2 56 -0.176974 0.134284 7
157
+ Tracker2 57 -0.177113 0.132872 15
158
+ Tracker2 58 -0.177299 0.128326 7
159
+ Tracker2 59 -0.177345 0.121244 15
160
+ Tracker2 60 -0.176663 0.117797 15
161
+ Tracker2 61 -0.175850 0.115510 7
162
+ Tracker2 62 -0.173083 0.113340 15
163
+ Tracker2 63 -0.170780 0.107403 15
164
+ Tracker2 64 -0.168977 0.102025 7
165
+ Tracker2 65 -0.167658 0.094368 7
166
+ Tracker2 66 -0.165954 0.086996 7
167
+ Tracker2 67 -0.164225 0.080293 15
168
+ Tracker2 68 -0.162816 0.074192 7
169
+ Tracker2 69 -0.161080 0.069813 7
170
+ Tracker2 70 -0.159298 0.065327 7
171
+ Tracker2 71 -0.157548 0.060723 15
172
+ Tracker2 72 -0.155697 0.054262 7
173
+ Tracker2 73 -0.154033 0.047026 7
174
+ Tracker2 74 -0.153275 0.040779 7
175
+ Tracker2 75 -0.153135 0.035032 15
176
+ Tracker2 76 -0.152931 0.031526 7
177
+ Tracker2 77 -0.152753 0.030994 7
178
+ Tracker2 78 -0.152824 0.031688 7
179
+ Tracker2 79 -0.153538 0.034206 15
180
+ Tracker2 80 -0.154456 0.040069 7
181
+ Tracker2 81 -0.154964 0.046396 7
182
+ Tracker2 82 -0.155105 0.052641 7
183
+ Tracker2 83 -0.154769 0.060664 15
184
+ Tracker2 84 -0.153725 0.068885 7
185
+ Tracker2 85 -0.153188 0.075191 7
186
+ Tracker2 86 -0.153946 0.081272 7
187
+ Tracker2 87 -0.156254 0.088602 15
188
+ Tracker2 88 -0.159782 0.093525 7
189
+ Tracker2 89 -0.162473 0.095964 7
190
+ Tracker2 90 -0.164623 0.097366 7
191
+ Tracker2 91 -0.166552 0.099808 15
192
+ Tracker2 92 -0.168490 0.104422 7
193
+ Tracker2 93 -0.170794 0.109309 7
194
+ Tracker2 94 -0.173098 0.113125 7
195
+ Tracker2 95 -0.175583 0.116447 15
196
+ Tracker2 96 -0.177962 0.122501 7
197
+ Tracker2 97 -0.179860 0.128698 7
198
+ Tracker2 98 -0.181097 0.132942 7
199
+ Tracker2 99 -0.181914 0.137025 15
200
+ Tracker2 100 -0.181737 0.141855 15
201
+ Tracker3 1 0.029375 0.297314 15
202
+ Tracker3 2 0.027216 0.301602 15
203
+ Tracker3 3 0.024262 0.305701 15
204
+ Tracker3 4 0.019697 0.309511 15
205
+ Tracker3 5 0.015606 0.313639 15
206
+ Tracker3 6 0.013642 0.315855 15
207
+ Tracker3 7 0.009907 0.318888 15
208
+ Tracker3 8 0.007132 0.322245 15
209
+ Tracker3 9 0.006645 0.323193 15
210
+ Tracker3 10 0.006991 0.320363 15
211
+ Tracker3 11 0.007255 0.314157 15
212
+ Tracker3 12 0.008207 0.308028 15
213
+ Tracker3 13 0.012222 0.304101 15
214
+ Tracker3 14 0.017373 0.301191 15
215
+ Tracker3 15 0.023739 0.299411 15
216
+ Tracker3 16 0.028142 0.299685 15
217
+ Tracker3 17 0.032201 0.300252 15
218
+ Tracker3 18 0.034781 0.301710 15
219
+ Tracker3 19 0.036645 0.306820 15
220
+ Tracker3 20 0.035937 0.312500 15
221
+ Tracker3 40 -0.005130 0.314829 15
222
+ Tracker3 41 0.000325 0.312557 7
223
+ Tracker3 42 0.005197 0.310963 15
224
+ Tracker3 43 0.011339 0.308689 7
225
+ Tracker3 44 0.017815 0.305824 7
226
+ Tracker3 45 0.021060 0.305452 7
227
+ Tracker3 46 0.024337 0.308461 15
228
+ Tracker3 47 0.028931 0.306942 7
229
+ Tracker3 48 0.035168 0.301539 15
230
+ Tracker3 49 0.040325 0.297609 7
231
+ Tracker3 50 0.043717 0.294415 15
232
+ Tracker3 51 0.046907 0.291773 7
233
+ Tracker3 52 0.049399 0.290531 7
234
+ Tracker3 53 0.050129 0.294656 7
235
+ Tracker3 54 0.050744 0.298230 15
236
+ Tracker3 55 0.051485 0.301521 7
237
+ Tracker3 56 0.051569 0.303142 7
238
+ Tracker3 57 0.051006 0.305505 7
239
+ Tracker3 58 0.050257 0.307138 15
240
+ Tracker3 59 0.049008 0.308547 7
241
+ Tracker3 60 0.047433 0.310866 7
242
+ Tracker3 61 0.045471 0.316841 7
243
+ Tracker3 62 0.044452 0.321831 15
244
+ Tracker3 63 0.043458 0.325178 7
245
+ Tracker3 64 0.042290 0.328161 7
246
+ Tracker3 65 0.041015 0.330747 7
247
+ Tracker3 66 0.039468 0.332888 15
248
+ Tracker3 67 0.038275 0.334048 7
249
+ Tracker3 68 0.036228 0.336213 7
250
+ Tracker3 69 0.035155 0.338253 7
251
+ Tracker3 70 0.034285 0.339384 15
252
+ Tracker3 71 0.032638 0.340141 7
253
+ Tracker3 72 0.031543 0.339421 7
254
+ Tracker3 73 0.030046 0.337935 7
255
+ Tracker3 74 0.027736 0.336373 15
256
+ Tracker3 75 0.024826 0.334910 7
257
+ Tracker3 76 0.021665 0.334658 7
258
+ Tracker3 77 0.018086 0.335635 7
259
+ Tracker3 78 0.014007 0.337624 15
260
+ Tracker3 79 0.008818 0.340629 7
261
+ Tracker3 80 0.002227 0.345950 7
262
+ Tracker3 81 -0.003961 0.350827 7
263
+ Tracker3 82 -0.009239 0.354910 15
264
+ Tracker3 83 -0.014786 0.359154 7
265
+ Tracker3 84 -0.020123 0.364077 7
266
+ Tracker3 85 -0.023813 0.367419 15
267
+ Tracker3 86 -0.026919 0.369777 7
268
+ Tracker3 87 -0.031238 0.370984 7
269
+ Tracker3 88 -0.036058 0.370039 7
270
+ Tracker3 89 -0.039306 0.368830 15
271
+ Tracker3 90 -0.040904 0.366708 7
272
+ Tracker3 91 -0.041982 0.363644 7
273
+ Tracker3 92 -0.042299 0.361697 7
274
+ Tracker3 93 -0.042302 0.357955 15
275
+ Tracker3 94 -0.042424 0.352349 7
276
+ Tracker3 95 -0.042283 0.347697 7
277
+ Tracker3 96 -0.041098 0.343715 7
278
+ Tracker3 97 -0.039286 0.342119 15
279
+ Tracker3 98 -0.036267 0.339158 7
280
+ Tracker3 99 -0.032690 0.336237 7
281
+ Tracker3 100 -0.028295 0.334936 7
282
+ Tracker4 1 -0.141346 -0.524181 15
283
+ Tracker4 2 -0.139808 -0.524866 7
284
+ Tracker4 3 -0.137194 -0.525621 7
285
+ Tracker4 4 -0.132435 -0.526443 7
286
+ Tracker4 5 -0.126617 -0.529137 15
287
+ Tracker4 6 -0.122892 -0.531972 15
288
+ Tracker4 7 -0.118485 -0.536609 15
289
+ Tracker4 8 -0.115401 -0.540953 15
290
+ Tracker4 9 -0.111884 -0.542177 15
291
+ Tracker4 10 -0.112642 -0.547604 15
292
+ Tracker4 24 -0.022042 -0.539211 15
293
+ Tracker4 25 -0.015617 -0.520728 15
294
+ Tracker4 26 -0.009675 -0.510719 15
295
+ Tracker4 27 -0.002830 -0.498516 15
296
+ Tracker4 28 0.001370 -0.485183 7
297
+ Tracker4 29 0.003582 -0.477919 15
298
+ Tracker4 30 0.003719 -0.471637 7
299
+ Tracker4 31 0.001485 -0.465727 7
300
+ Tracker4 32 -0.002739 -0.460473 15
301
+ Tracker4 33 -0.008122 -0.459204 7
302
+ Tracker4 34 -0.014305 -0.459364 15
303
+ Tracker4 35 -0.022097 -0.458937 15
304
+ Tracker4 36 -0.030924 -0.458652 15
305
+ Tracker4 37 -0.038873 -0.459148 15
306
+ Tracker4 38 -0.045733 -0.455958 15
307
+ Tracker4 39 -0.053126 -0.455553 7
308
+ Tracker4 40 -0.062234 -0.462990 15
309
+ Tracker4 41 -0.069564 -0.466768 7
310
+ Tracker4 42 -0.076256 -0.468721 15
311
+ Tracker4 43 -0.085403 -0.471144 7
312
+ Tracker4 44 -0.096182 -0.476055 15
313
+ Tracker4 45 -0.104803 -0.475546 7
314
+ Tracker4 46 -0.111149 -0.472495 15
315
+ Tracker4 47 -0.119929 -0.476693 7
316
+ Tracker4 48 -0.130288 -0.485164 15
317
+ Tracker4 49 -0.138894 -0.488499 7
318
+ Tracker4 50 -0.146865 -0.489164 15
319
+ Tracker4 51 -0.153569 -0.489791 7
320
+ Tracker4 52 -0.159451 -0.486731 15
321
+ Tracker4 53 -0.164503 -0.479067 7
322
+ Tracker4 54 -0.168377 -0.472754 15
323
+ Tracker4 55 -0.170097 -0.469843 7
324
+ Tracker4 56 -0.170087 -0.469861 7
325
+ Tracker4 57 -0.168217 -0.470531 7
326
+ Tracker4 58 -0.165243 -0.474125 15
327
+ Tracker4 59 -0.161694 -0.479578 7
328
+ Tracker4 60 -0.156510 -0.483067 15
329
+ Tracker4 61 -0.151511 -0.484667 7
330
+ Tracker4 62 -0.145787 -0.486385 15
331
+ Tracker4 63 -0.138803 -0.489119 15
332
+ Tracker4 64 -0.132808 -0.490583 15
333
+ Tracker4 65 -0.129589 -0.492715 15
334
+ Tracker4 66 -0.124991 -0.496557 15
335
+ Tracker4 84 -0.037303 -0.496972 15
336
+ Tracker4 85 -0.031902 -0.488642 7
337
+ Tracker4 86 -0.030125 -0.484296 15
338
+ Tracker4 87 -0.027741 -0.477430 7
339
+ Tracker4 88 -0.024101 -0.471666 15
340
+ Tracker4 89 -0.023435 -0.468003 7
341
+ Tracker4 90 -0.023441 -0.466504 7
342
+ Tracker4 91 -0.024109 -0.463933 7
343
+ Tracker4 92 -0.026124 -0.459017 15
344
+ Tracker4 93 -0.029179 -0.455465 7
345
+ Tracker4 94 -0.031963 -0.451434 7
346
+ Tracker4 95 -0.035323 -0.447856 15
347
+ Tracker4 96 -0.041629 -0.442506 15
348
+ Tracker4 97 -0.048278 -0.435412 15
349
+ Tracker4 98 -0.053804 -0.430195 15
350
+ Tracker4 99 -0.058496 -0.425830 15
351
+ Tracker4 100 -0.062753 -0.420563 15
352
+ Tracker5 1 -0.206137 0.319118 15
353
+ Tracker5 2 -0.209174 0.321161 7
354
+ Tracker5 3 -0.212790 0.322182 15
355
+ Tracker5 4 -0.217395 0.322258 7
356
+ Tracker5 5 -0.222221 0.320194 7
357
+ Tracker5 6 -0.224976 0.318449 7
358
+ Tracker5 7 -0.228502 0.317380 15
359
+ Tracker5 8 -0.231699 0.314805 7
360
+ Tracker5 9 -0.232737 0.312436 7
361
+ Tracker5 10 -0.233135 0.306186 7
362
+ Tracker5 11 -0.234384 0.296288 15
363
+ Tracker5 12 -0.233790 0.285765 7
364
+ Tracker5 13 -0.229795 0.276636 7
365
+ Tracker5 14 -0.224344 0.269603 7
366
+ Tracker5 15 -0.216515 0.263445 15
367
+ Tracker5 16 -0.209469 0.260194 7
368
+ Tracker5 17 -0.203689 0.258625 7
369
+ Tracker5 18 -0.198040 0.260830 7
370
+ Tracker5 19 -0.194105 0.266561 15
371
+ Tracker5 20 -0.193240 0.270362 7
372
+ Tracker5 21 -0.193176 0.275049 7
373
+ Tracker5 22 -0.195389 0.281314 7
374
+ Tracker5 23 -0.199494 0.286278 15
375
+ Tracker5 24 -0.203009 0.291862 7
376
+ Tracker5 25 -0.205534 0.297327 7
377
+ Tracker5 26 -0.207309 0.301784 7
378
+ Tracker5 27 -0.210842 0.305487 15
379
+ Tracker5 28 -0.213848 0.307085 7
380
+ Tracker5 29 -0.214989 0.307036 7
381
+ Tracker5 30 -0.217635 0.305938 7
382
+ Tracker5 31 -0.222609 0.302859 15
383
+ Tracker5 32 -0.227926 0.299648 7
384
+ Tracker5 33 -0.232246 0.295468 7
385
+ Tracker5 34 -0.235032 0.291212 7
386
+ Tracker5 35 -0.236719 0.288172 15
387
+ Tracker5 36 -0.236046 0.288797 7
388
+ Tracker5 37 -0.233410 0.289681 7
389
+ Tracker5 38 -0.231145 0.292341 7
390
+ Tracker5 39 -0.228194 0.294578 15
391
+ Tracker5 40 -0.223469 0.294111 7
392
+ Tracker5 41 -0.219584 0.294537 7
393
+ Tracker5 42 -0.216364 0.296272 15
394
+ Tracker5 43 -0.211549 0.299429 7
395
+ Tracker5 44 -0.206356 0.301828 7
396
+ Tracker5 45 -0.203895 0.305064 7
397
+ Tracker5 46 -0.201136 0.310823 15
398
+ Tracker5 47 -0.196263 0.316489 7
399
+ Tracker5 48 -0.190688 0.320439 7
400
+ Tracker5 49 -0.186119 0.325872 7
401
+ Tracker5 50 -0.182208 0.331490 15
402
+ Tracker5 51 -0.178886 0.335618 7
403
+ Tracker5 52 -0.176032 0.341463 7
404
+ Tracker5 53 -0.174695 0.350696 7
405
+ Tracker5 54 -0.173750 0.359392 15
406
+ Tracker5 55 -0.172859 0.364302 7
407
+ Tracker5 56 -0.173142 0.367242 7
408
+ Tracker5 57 -0.174499 0.369487 7
409
+ Tracker5 58 -0.176727 0.369589 15
410
+ Tracker5 59 -0.179694 0.367297 7
411
+ Tracker5 60 -0.182898 0.365766 7
412
+ Tracker5 61 -0.185446 0.366974 15
413
+ Tracker5 62 -0.187882 0.366510 15
414
+ Tracker5 63 -0.190253 0.363769 7
415
+ Tracker5 64 -0.192139 0.361595 15
416
+ Tracker5 65 -0.193968 0.358146 7
417
+ Tracker5 66 -0.195454 0.354174 7
418
+ Tracker5 67 -0.197534 0.349025 7
419
+ Tracker5 68 -0.199962 0.344059 15
420
+ Tracker5 69 -0.201200 0.340280 7
421
+ Tracker5 70 -0.202095 0.336731 7
422
+ Tracker5 71 -0.203115 0.332478 7
423
+ Tracker5 72 -0.203762 0.326595 15
424
+ Tracker5 73 -0.204916 0.319710 7
425
+ Tracker5 74 -0.206873 0.313148 7
426
+ Tracker5 75 -0.209143 0.306793 7
427
+ Tracker5 76 -0.211395 0.301663 15
428
+ Tracker5 77 -0.213783 0.298337 7
429
+ Tracker5 78 -0.216471 0.296004 7
430
+ Tracker5 79 -0.219995 0.294290 7
431
+ Tracker5 80 -0.224138 0.294437 15
432
+ Tracker5 81 -0.227869 0.295147 7
433
+ Tracker5 82 -0.231172 0.295237 7
434
+ Tracker5 83 -0.234370 0.295840 7
435
+ Tracker5 84 -0.237074 0.296636 15
436
+ Tracker5 85 -0.239281 0.296974 7
437
+ Tracker5 86 -0.241543 0.296900 7
438
+ Tracker5 87 -0.244754 0.296136 7
439
+ Tracker5 88 -0.248675 0.293998 15
440
+ Tracker5 89 -0.251720 0.291354 7
441
+ Tracker5 90 -0.253362 0.288951 7
442
+ Tracker5 91 -0.254239 0.287857 7
443
+ Tracker5 92 -0.254576 0.288648 15
444
+ Tracker5 93 -0.254831 0.288583 7
445
+ Tracker5 94 -0.255036 0.287534 7
446
+ Tracker5 95 -0.255011 0.286478 7
447
+ Tracker5 96 -0.254294 0.287536 15
448
+ Tracker5 97 -0.252780 0.289234 7
449
+ Tracker5 98 -0.250309 0.290387 7
450
+ Tracker5 99 -0.247215 0.291968 7
451
+ Tracker5 100 -0.243232 0.295125 15
452
+ Tracker6 11 -0.266759 -0.190952 15
453
+ Tracker6 12 -0.266112 -0.201315 15
454
+ Tracker6 13 -0.262106 -0.209481 15
455
+ Tracker6 14 -0.256514 -0.217439 15
456
+ Tracker6 15 -0.248641 -0.225078 15
457
+ Tracker6 16 -0.242106 -0.230155 15
458
+ Tracker6 17 -0.235475 -0.234118 15
459
+ Tracker6 18 -0.229138 -0.235007 15
460
+ Tracker6 19 -0.224117 -0.232309 7
461
+ Tracker6 20 -0.220807 -0.231347 7
462
+ Tracker6 21 -0.218148 -0.229252 7
463
+ Tracker6 22 -0.216147 -0.225813 15
464
+ Tracker6 23 -0.214702 -0.222107 7
465
+ Tracker6 24 -0.212327 -0.216132 7
466
+ Tracker6 25 -0.209741 -0.209695 7
467
+ Tracker6 26 -0.207191 -0.203733 15
468
+ Tracker6 27 -0.205137 -0.197688 7
469
+ Tracker6 28 -0.203672 -0.193231 7
470
+ Tracker6 29 -0.202791 -0.190783 7
471
+ Tracker6 30 -0.203506 -0.188936 15
472
+ Tracker6 31 -0.206520 -0.188169 7
473
+ Tracker6 32 -0.210673 -0.187204 7
474
+ Tracker6 33 -0.215351 -0.188285 7
475
+ Tracker6 34 -0.219711 -0.189178 15
476
+ Tracker6 35 -0.224769 -0.190606 7
477
+ Tracker6 36 -0.229313 -0.187923 15
478
+ Tracker6 37 -0.232019 -0.184825 7
479
+ Tracker6 38 -0.233929 -0.179373 15
480
+ Tracker6 73 -0.242221 -0.151581 15
481
+ Tracker6 74 -0.241814 -0.159440 15
482
+ Tracker6 75 -0.241655 -0.165701 15
483
+ Tracker6 76 -0.241944 -0.172071 15
484
+ Tracker6 77 -0.241186 -0.177904 15
485
+ Tracker6 78 -0.240360 -0.182202 15
486
+ Tracker6 79 -0.240269 -0.186787 15
487
+ Tracker6 80 -0.239474 -0.190737 15
488
+ Tracker6 81 -0.238315 -0.193273 15
489
+ Tracker6 82 -0.237023 -0.194493 15
490
+ Tracker6 83 -0.234423 -0.196205 15
491
+ Tracker6 84 -0.231495 -0.196711 15
492
+ Tracker6 85 -0.229403 -0.197679 7
493
+ Tracker6 86 -0.228155 -0.197459 7
494
+ Tracker6 87 -0.227834 -0.197109 7
495
+ Tracker6 88 -0.228092 -0.196959 15
496
+ Tracker6 89 -0.228463 -0.197926 7
497
+ Tracker6 90 -0.228879 -0.199092 7
498
+ Tracker6 91 -0.229619 -0.198618 7
499
+ Tracker6 92 -0.230831 -0.196777 15
500
+ Tracker6 93 -0.232558 -0.193906 7
501
+ Tracker6 94 -0.234311 -0.192568 7
502
+ Tracker6 95 -0.236661 -0.190729 7
503
+ Tracker6 96 -0.239287 -0.185442 15
504
+ Tracker6 97 -0.241124 -0.179175 15
505
+ Tracker6 98 -0.242526 -0.175409 15
506
+ Tracker6 99 -0.243169 -0.171481 15
507
+ Tracker6 100 -0.244288 -0.166090 15
@@ -3,6 +3,10 @@ require File.dirname(__FILE__) + '/../helper'
3
3
  class ShakeCatcherTest < Test::Unit::TestCase
4
4
  C = Tracksperanto::ShakeGrammar::Catcher
5
5
 
6
+ def at(at, v)
7
+ C::At.new(at, v)
8
+ end
9
+
6
10
  def test_hould_catch_simple_funcall
7
11
  k = Class.new(C) do
8
12
  def foofunc(a, b, c)
@@ -16,10 +20,10 @@ class ShakeCatcherTest < Test::Unit::TestCase
16
20
  def test_uknown_funcalls
17
21
  k = Class.new(C)
18
22
  tree = parse("OuterFunc(InnerFunc(15)", k)
19
- assert_equal [:unknown_func], tree
23
+ assert_equal [[:unknown_func]], tree
20
24
 
21
25
  tree = parse("OuterFunc(15);", k)
22
- assert_equal [:unknown_func], tree
26
+ assert_equal [[:unknown_func]], tree
23
27
  end
24
28
 
25
29
  def test_nested_funcalls
@@ -45,25 +49,18 @@ class ShakeCatcherTest < Test::Unit::TestCase
45
49
  end
46
50
 
47
51
  tree = parse('Hermite(0,[1379.04,-0.02,-0.02]@1,[1379.04,-0.03,-0.03]@2)', k)
48
- assert_equal [[:retval, [[1379.04, -0.02, -0.02], 1, [1379.04, -0.03, -0.03], 2]]], tree
52
+ assert_equal [[:retval, [at(1, [1379.04, -0.02, -0.02]), at(2, [1379.04, -0.03, -0.03])]]], tree
49
53
  end
50
54
 
51
55
  def test_linear_funcall
52
56
  k = Class.new(C) do
53
57
  def linear(first_arg, *keyframes)
54
- keyframes
58
+ 123
55
59
  end
56
60
  end
57
61
 
58
62
  tree = parse('Linear(0,591.702@1,591.452@2,591.202@3,590.733@4,590.202@5,589.421@6,589.249@7)', k)
59
- assert_equal [[:retval,
60
- [[[:atom_f, 591.702], [:atom_at_i, 1]],
61
- [[:atom_f, 591.452], [:atom_at_i, 2]],
62
- [[:atom_f, 591.202], [:atom_at_i, 3]],
63
- [[:atom_f, 590.733], [:atom_at_i, 4]],
64
- [[:atom_f, 590.202], [:atom_at_i, 5]],
65
- [[:atom_f, 589.421], [:atom_at_i, 6]],
66
- [[:atom_f, 589.249], [:atom_at_i, 7]]]]], tree
63
+ assert_equal [[:retval, 123]], tree
67
64
  end
68
65
 
69
66
  def test_nested_funcalls_with_array_return
@@ -20,10 +20,12 @@ class ShakeLexerTest < Test::Unit::TestCase
20
20
  curve = 'Hermite(0,[1379.04,-0.02,-0.02]@1,[1379.04,-0.03,-0.03]@2)'
21
21
  s = parse(curve)
22
22
  assert_equal [
23
- [:funcall, "Hermite", [:atom_i, 0],
24
- [:arr, [:atom_f, 1379.04], [:atom_f, -0.02], [:atom_f, -0.02]], [:atom_at_i, 1],
25
- [:arr, [:atom_f, 1379.04], [:atom_f, -0.03], [:atom_f, -0.03]], [:atom_at_i, 2]
26
- ]
23
+ [:funcall,
24
+ "Hermite",
25
+ 0,
26
+ [:value_at, 1, [:arr, [1379.04, -0.02, -0.02]]],
27
+ [:value_at, 2, [:arr, [1379.04, -0.03, -0.03]]]
28
+ ]
27
29
  ], s
28
30
  end
29
31
 
@@ -35,46 +37,49 @@ class ShakeLexerTest < Test::Unit::TestCase
35
37
 
36
38
  def test_parse_funcall
37
39
  s = parse ' DoFoo(1, 2, 3, "Welcome!\"\""); '
38
- assert_equal [[:funcall, "DoFoo", [:atom_i, 1], [:atom_i, 2], [:atom_i, 3], [:atom_c, 'Welcome!""']]], s
40
+ assert_equal [[:funcall, "DoFoo", 1, 2, 3, "Welcome!\"\""]], s
39
41
  end
40
42
 
41
43
  def test_parse_nested_funcall
42
44
  s = parse ' DoFoo(1, Foo(4));'
43
- assert_equal [[:funcall, "DoFoo", [:atom_i, 1], [:funcall, "Foo", [:atom_i, 4]]]], s
45
+ assert_equal [[:funcall, "DoFoo", 1, [:funcall, "Foo", 4]]], s
44
46
  end
45
47
 
46
48
  def test_parse_single_nested_funcall
47
49
  s = parse("OuterFunc(InnerFunc(15)")
48
- assert_equal [[:funcall, "OuterFunc", [:funcall, "InnerFunc", [:atom_i, 15]]]], s
50
+ assert_equal [[:funcall, "OuterFunc", [:funcall, "InnerFunc", 15]]], s
49
51
  end
50
52
 
51
53
  def test_parse_single_funcall
52
54
  s = parse('SomeFunc(1,2,3)')
53
- assert_equal [[:funcall, "SomeFunc", [:atom_i, 1], [:atom_i, 2], [:atom_i, 3]]], s
55
+ assert_equal [[:funcall, "SomeFunc", 1, 2, 3]], s
54
56
  end
55
57
 
56
58
  def test_parse_funcall_with_valueats
57
59
  s = parse 'Linear(0,716.08@1,715.846@2,715.518@3,715.034@4,714.377@5)'
58
60
  assert_equal(
59
- [
60
- [:funcall, "Linear", [:atom_i, 0],
61
- [[:atom_f, 716.08], [:atom_at_i, 1]],
62
- [[:atom_f, 715.846], [:atom_at_i, 2]],
63
- [[:atom_f, 715.518], [:atom_at_i, 3]],
64
- [[:atom_f, 715.034], [:atom_at_i, 4]],
65
- [[:atom_f, 714.377], [:atom_at_i, 5]]
66
- ]
67
- ],
61
+ [[
62
+ :funcall,
63
+ "Linear",
64
+ 0,
65
+ [:value_at, 1, 716.08],
66
+ [:value_at, 2, 715.846],
67
+ [:value_at, 3, 715.518],
68
+ [:value_at, 4, 715.034],
69
+ [:value_at, 5, 714.377]
70
+ ]],
68
71
  s)
69
72
  end
70
73
 
71
74
  def test_parse_hermite_valuats_containing_arrays
72
75
  # Hermite curves use array args
73
76
  s = parse 'Hermite(0,[-64,98.33,98.33]@1,[50,97.29,97.29]@4)'
74
- ref = [[:funcall, "Hermite",
75
- [:atom_i, 0],
76
- [:arr, [:atom_f, -64.0], [:atom_f, 98.33], [:atom_f, 98.33]], [:atom_at_i, 1],
77
- [:arr, [:atom_i, 50], [:atom_f, 97.29], [:atom_f, 97.29]], [:atom_at_i, 4]
77
+ ref = [[
78
+ :funcall,
79
+ "Hermite",
80
+ 0,
81
+ [:value_at, 1, [:arr, [-64.0, 98.33, 98.33]]],
82
+ [:value_at, 4, [:arr, [50, 97.29, 97.29]]]
78
83
  ]]
79
84
  assert_equal ref, s
80
85
  end
@@ -88,9 +93,8 @@ class ShakeLexerTest < Test::Unit::TestCase
88
93
  end
89
94
 
90
95
  def test_parse_varassign
91
- s = parse 'Foo = Blur(Foo, 1, 2, 3);'
92
- assert_equal [[:var, "Foo"], [:eq], [:funcall, "Blur", [:atom, "Foo"], [:atom_i, 1],
93
- [:atom_i, 2], [:atom_i, 3]]], s
96
+ s = parse 'Foo = Blur(Foo, 1, 2, 3); 1'
97
+ assert_equal [[:assign, "Foo", [:funcall, "Blur", [:atom, "Foo"], 1, 2, 3]]], s
94
98
  end
95
99
 
96
100
  def test_parse_whole_file_does_not_raise
@@ -10,13 +10,14 @@ class ShakeScriptImportTest < Test::Unit::TestCase
10
10
  assert_equal 50, trackers.length
11
11
 
12
12
  t = trackers[0]
13
- assert_equal "Tracker1_track1", t.name
13
+ assert_equal "Tracker8_track1", t.name
14
14
 
15
15
  first_kf = t.keyframes[0]
16
- assert_equal 0, first_kf.frame
17
- assert_in_delta 886.212, first_kf.abs_y, DELTA
18
- assert_in_delta 715.839, first_kf.abs_x, DELTA
19
- assert_in_delta 0.0, first_kf.residual, DELTA
16
+ assert_equal 107, first_kf.frame
17
+
18
+ assert_in_delta 1065.41, first_kf.abs_y, DELTA
19
+ assert_in_delta 1281.14, first_kf.abs_x, DELTA
20
+ assert_in_delta 1.0, first_kf.residual, DELTA
20
21
 
21
22
  second_kf = t.keyframes[1]
22
23
  assert_in_delta 0.00129, second_kf.residual, DELTA
@@ -100,14 +101,13 @@ class ShakeScriptImportTest < Test::Unit::TestCase
100
101
  fixture = File.open(File.dirname(__FILE__) + "/samples/shake_script/stabilize_nodes_with_hermite.shk")
101
102
  trackers = Tracksperanto::Import::ShakeScript.new.parse(fixture)
102
103
  assert_equal 3, trackers.length
103
-
104
104
  last_t = trackers[-1]
105
- assert_equal "Stabilize3_track1", last_t.name
106
- assert_equal 74, last_t.length
105
+ assert_equal "Stabilize1_track1", last_t.name
106
+ assert_equal 73, last_t.length
107
107
 
108
108
  last_kf = last_t[-1]
109
109
  assert_equal 76, last_kf.frame
110
- assert_in_delta 982.97, last_kf.abs_x, DELTA
111
- assert_in_delta 1202.39, last_kf.abs_y, DELTA
110
+ assert_in_delta 1256.72, last_kf.abs_x, DELTA
111
+ assert_in_delta 1569.04, last_kf.abs_y, DELTA
112
112
  end
113
113
  end
@@ -27,4 +27,14 @@ class SyntheyesImportTest < Test::Unit::TestCase
27
27
  assert_in_delta 886.212, first_kf.abs_y, DELTA
28
28
  assert_in_delta 0.0, first_kf.residual, DELTA
29
29
  end
30
+
31
+ def test_parsing_cola_plate
32
+ fixture = File.open(File.dirname(__FILE__) + '/samples/syntheyes_2d_paths/cola_plate.txt')
33
+ parser = Tracksperanto::Import::Syntheyes.new
34
+ parser.width = 1920
35
+ parser.height = 1080
36
+
37
+ trackers = parser.parse(fixture)
38
+ assert_equal 6, trackers.length
39
+ end
30
40
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tracksperanto
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.8
4
+ version: 1.6.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-13 00:00:00 +01:00
12
+ date: 2010-01-21 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -120,10 +120,10 @@ files:
120
120
  - test/export/test_syntheyes_export.rb
121
121
  - test/helper.rb
122
122
  - test/import/.DS_Store
123
- - test/import/samples/.DS_Store
124
123
  - test/import/samples/3de_v3/3de_export_v3.txt
125
124
  - test/import/samples/3de_v4/3de_export_cube.txt
126
125
  - test/import/samples/boujou_features_text/boujou_txt_export.txt
126
+ - test/import/samples/flame_stabilizer/.DS_Store
127
127
  - test/import/samples/flame_stabilizer/fromCombustion_fromMidClip_wSnap.stabilizer
128
128
  - test/import/samples/flame_stabilizer/hugeFlameSetup.stabilizer
129
129
  - test/import/samples/flame_stabilizer/megaTrack.action.3dtrack.stabilizer
@@ -135,7 +135,9 @@ files:
135
135
  - test/import/samples/nuke/tracker_with_differing_gaps.nk
136
136
  - test/import/samples/nuke/tracker_with_repeating_gaps.nk
137
137
  - test/import/samples/pftrack4/sourcefile_pftrack.2dt
138
+ - test/import/samples/pftrack5/.DS_Store
138
139
  - test/import/samples/pftrack5/garage.2dt
140
+ - test/import/samples/shake_script/.DS_Store
139
141
  - test/import/samples/shake_script/four_tracks_in_one_matchmove.shk
140
142
  - test/import/samples/shake_script/four_tracks_in_one_stabilizer.shk
141
143
  - test/import/samples/shake_script/shake_script_from_boujou.shk
@@ -148,6 +150,8 @@ files:
148
150
  - test/import/samples/shake_text/one_shake_tracker.txt
149
151
  - test/import/samples/shake_text/one_shake_tracker_from_first.txt
150
152
  - test/import/samples/shake_text/two_shake_trackers.txt
153
+ - test/import/samples/syntheyes_2d_paths/.DS_Store
154
+ - test/import/samples/syntheyes_2d_paths/cola_plate.txt
151
155
  - test/import/samples/syntheyes_2d_paths/flyover2DP_syntheyes.txt
152
156
  - test/import/samples/syntheyes_2d_paths/shake_tracker_nodes_to_syntheyes.txt
153
157
  - test/import/test_3de_import.rb