tracksperanto 1.6.8 → 1.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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