tracksperanto 2.8.6 → 2.9.0

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.
Files changed (127) hide show
  1. data/DEVELOPER_DOCS.rdoc +17 -5
  2. data/History.txt +8 -0
  3. data/README.rdoc +2 -0
  4. data/lib/export/base.rb +1 -0
  5. data/lib/export/boujou.rb +2 -1
  6. data/lib/export/equalizer3.rb +1 -0
  7. data/lib/export/equalizer4.rb +1 -0
  8. data/lib/export/flame_stabilizer.rb +1 -0
  9. data/lib/export/flame_stabilizer_cornerpin.rb +1 -0
  10. data/lib/export/match_mover.rb +2 -1
  11. data/lib/export/maya_live.rb +2 -1
  12. data/lib/export/mux.rb +1 -0
  13. data/lib/export/nuke_script.rb +2 -1
  14. data/lib/export/pfmatchit.rb +2 -1
  15. data/lib/export/pftrack.rb +2 -1
  16. data/lib/export/pftrack_5.rb +2 -1
  17. data/lib/export/ruby.rb +38 -0
  18. data/lib/export/shake_text.rb +2 -1
  19. data/lib/export/syntheyes.rb +1 -0
  20. data/lib/import/base.rb +2 -1
  21. data/lib/import/boujou.rb +2 -1
  22. data/lib/import/equalizer3.rb +2 -1
  23. data/lib/import/equalizer4.rb +2 -1
  24. data/lib/import/flame_stabilizer.rb +2 -1
  25. data/lib/import/match_mover.rb +3 -2
  26. data/lib/import/maya_live.rb +2 -1
  27. data/lib/import/nuke_grammar/utils.rb +2 -1
  28. data/lib/import/nuke_script.rb +2 -1
  29. data/lib/import/pftrack.rb +2 -1
  30. data/lib/import/shake_grammar/catcher.rb +2 -1
  31. data/lib/import/shake_grammar/lexer.rb +2 -1
  32. data/lib/import/shake_script.rb +2 -1
  33. data/lib/import/shake_text.rb +1 -0
  34. data/lib/import/syntheyes.rb +2 -1
  35. data/lib/middleware/base.rb +1 -0
  36. data/lib/middleware/crop.rb +2 -1
  37. data/lib/middleware/flip.rb +2 -1
  38. data/lib/middleware/flop.rb +2 -1
  39. data/lib/middleware/golden.rb +2 -1
  40. data/lib/middleware/length_cutoff.rb +2 -1
  41. data/lib/middleware/lerp.rb +2 -1
  42. data/lib/middleware/lint.rb +2 -1
  43. data/lib/middleware/pad.rb +2 -1
  44. data/lib/middleware/prefix.rb +2 -1
  45. data/lib/middleware/reformat.rb +2 -1
  46. data/lib/middleware/scaler.rb +2 -1
  47. data/lib/middleware/shift.rb +2 -1
  48. data/lib/middleware/slipper.rb +2 -1
  49. data/lib/middleware/start_trim.rb +2 -1
  50. data/lib/pipeline/base.rb +2 -1
  51. data/lib/tracksperanto/block_init.rb +1 -0
  52. data/lib/tracksperanto/buffer_io.rb +2 -1
  53. data/lib/tracksperanto/buffering_reader.rb +2 -1
  54. data/lib/tracksperanto/casts.rb +2 -1
  55. data/lib/tracksperanto/const_name.rb +2 -1
  56. data/lib/tracksperanto/ext_io.rb +2 -1
  57. data/lib/tracksperanto/format_detector.rb +2 -1
  58. data/lib/tracksperanto/keyframe.rb +4 -4
  59. data/lib/tracksperanto/returning.rb +2 -1
  60. data/lib/tracksperanto/safety.rb +2 -1
  61. data/lib/tracksperanto/simple_export.rb +1 -0
  62. data/lib/tracksperanto/tracker.rb +99 -15
  63. data/lib/tracksperanto/uv_coordinates.rb +2 -1
  64. data/lib/tracksperanto/zip_tuples.rb +2 -1
  65. data/lib/tracksperanto.rb +2 -1
  66. data/test/export/samples/ref_Mayalive.txt +36 -36
  67. data/test/export/samples/ref_Mayalive_CustomAspect.txt +36 -36
  68. data/test/export/samples/ref_Ruby.rb +54 -0
  69. data/test/export/samples/ref_boujou.txt +1 -0
  70. data/test/export/samples/ref_equalizer.txt +20 -20
  71. data/test/export/samples/ref_matchmover.rz2 +36 -36
  72. data/test/export/test_boujou_export.rb +2 -1
  73. data/test/export/test_equalizer3_export.rb +2 -1
  74. data/test/export/test_equalizer_export.rb +2 -3
  75. data/test/export/test_flame_stabilizer_cornerpin_export.rb +2 -1
  76. data/test/export/test_flame_stabilizer_export.rb +2 -1
  77. data/test/export/test_match_mover_export.rb +2 -1
  78. data/test/export/test_maya_live_export.rb +2 -1
  79. data/test/export/test_mux.rb +1 -0
  80. data/test/export/test_nuke_export.rb +2 -1
  81. data/test/export/test_pfmatchit_export.rb +2 -1
  82. data/test/export/test_pftrack5_export.rb +2 -1
  83. data/test/export/test_pftrack_export.rb +2 -1
  84. data/test/export/test_ruby_export.rb +17 -0
  85. data/test/export/test_shake_export.rb +2 -1
  86. data/test/export/test_syntheyes_export.rb +1 -0
  87. data/test/helper.rb +48 -54
  88. data/test/import/test_3de_import.rb +2 -1
  89. data/test/import/test_3de_import3.rb +2 -1
  90. data/test/import/test_boujou_import.rb +2 -1
  91. data/test/import/test_flame_import.rb +2 -1
  92. data/test/import/test_match_mover_import.rb +3 -1
  93. data/test/import/test_maya_live_import.rb +2 -1
  94. data/test/import/test_nuke_import.rb +2 -1
  95. data/test/import/test_pftrack_import.rb +2 -1
  96. data/test/import/test_shake_catcher.rb +2 -1
  97. data/test/import/test_shake_lexer.rb +2 -1
  98. data/test/import/test_shake_script_import.rb +2 -1
  99. data/test/import/test_shake_text_import.rb +2 -1
  100. data/test/import/test_syntheyes_import.rb +2 -1
  101. data/test/middleware/test_crop_middleware.rb +2 -1
  102. data/test/middleware/test_flip_middleware.rb +2 -1
  103. data/test/middleware/test_flop_middleware.rb +1 -0
  104. data/test/middleware/test_golden_middleware.rb +2 -1
  105. data/test/middleware/test_length_cutoff_middleware.rb +2 -1
  106. data/test/middleware/test_lerp_middleware.rb +2 -1
  107. data/test/middleware/test_lint_middleware.rb +2 -1
  108. data/test/middleware/test_pad_middleware.rb +2 -1
  109. data/test/middleware/test_prefix.rb +2 -1
  110. data/test/middleware/test_reformat_middleware.rb +2 -1
  111. data/test/middleware/test_scaler_middleware.rb +2 -1
  112. data/test/middleware/test_shift_middleware.rb +2 -1
  113. data/test/middleware/test_slip_middleware.rb +2 -1
  114. data/test/middleware/test_start_trim_middleware.rb +2 -1
  115. data/test/test_buffer_io.rb +2 -1
  116. data/test/test_bufferingreader.rb +2 -1
  117. data/test/test_cli.rb +4 -2
  118. data/test/test_const_name.rb +2 -1
  119. data/test/test_extio.rb +2 -1
  120. data/test/test_format_detector.rb +2 -1
  121. data/test/test_keyframe.rb +15 -1
  122. data/test/test_pipeline.rb +2 -1
  123. data/test/test_simple_export.rb +2 -1
  124. data/test/test_tracker.rb +86 -12
  125. data/test/test_tracksperanto.rb +2 -1
  126. data/tracksperanto.gemspec +5 -2
  127. metadata +23 -20
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Provides const_name that returns the name of the class or module (or the name of the class
2
3
  # an instance belongs to) without it's parent namespace. Useful for building module tables
3
4
  module Tracksperanto::ConstName
@@ -15,4 +16,4 @@ module Tracksperanto::ConstName
15
16
  into.extend(C)
16
17
  super
17
18
  end
18
- end
19
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Many importers use this as a standard. This works like a wrapper for any
2
3
  # IO object with a couple extra methods added. Note that if you use this in an
3
4
  # importer you need to wrap the incoming input with it yourself (that is, an IO passed
@@ -29,4 +30,4 @@ class Tracksperanto::ExtIO < DelegateClass(IO)
29
30
  return s unless s.empty?
30
31
  end
31
32
  end
32
- end
33
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Finds a suitable importer for the chosen file path. Or at least tries to, based on the file extension.
2
3
  # Will then examine all the importers and ask them if they can handle the specified file
3
4
  class Tracksperanto::FormatDetector
@@ -35,4 +36,4 @@ class Tracksperanto::FormatDetector
35
36
  def human_importer_name
36
37
  match? ? importer_klass.human_name : "Unknown format"
37
38
  end
38
- end
39
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Internal representation of a keyframe, that carries info on the frame location in the clip, x y and residual.
2
3
  #
3
4
  # Franme numbers are zero-based (frame 0 is first frame of the clip).
@@ -6,8 +7,7 @@
6
7
  # Residual is how far in pixels the tracker strolls away, and is the inverse of
7
8
  # correlation (with total correlation of one the residual excursion becomes zero).
8
9
  class Tracksperanto::Keyframe
9
- include Tracksperanto::Casts
10
- include Tracksperanto::BlockInit
10
+ include Tracksperanto::Casts, Tracksperanto::BlockInit, Comparable
11
11
 
12
12
  # Absolute integer frame where this keyframe is placed, 0 based
13
13
  attr_accessor :frame
@@ -29,6 +29,6 @@ class Tracksperanto::Keyframe
29
29
  end
30
30
 
31
31
  def <=>(another)
32
- frame <=> another.frame
32
+ [frame, abs_x, abs_y, residual] <=> [another.frame, another.abs_x, another.abs_y, another.residual]
33
33
  end
34
- end
34
+ end
@@ -1,6 +1,7 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module Tracksperanto::Returning
2
3
  # The "returning" idiom copied from ActiveSupport
3
4
  def returning(r)
4
5
  yield(r); r
5
6
  end
6
- end
7
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Implements the +safe_reader+ class method which will define (or override) readers that
2
3
  # raise if ivar is nil
3
4
  module Tracksperanto::Safety
@@ -17,4 +18,4 @@ module Tracksperanto::Safety
17
18
  end
18
19
  end
19
20
  end
20
- end
21
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Implements just_export for quickly pushing trackers out through an exporter without using Pipeline
2
3
  # plumbing
3
4
  module Tracksperanto::SimpleExport
@@ -1,29 +1,60 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Internal representation of a tracker point with keyframes. A Tracker is an array of Keyframe objects
2
3
  # with a few methods added for convenience
3
- class Tracksperanto::Tracker < DelegateClass(Array)
4
- include Tracksperanto::Casts
5
- include Tracksperanto::BlockInit
6
- include Comparable
4
+ class Tracksperanto::Tracker
5
+ include Tracksperanto::Casts, Tracksperanto::BlockInit, Comparable, Enumerable
7
6
 
8
7
  # Contains the name of the tracker
9
8
  attr_accessor :name
10
9
  cast_to_string :name
11
10
 
11
+ class Dupe < RuntimeError
12
+ end
13
+
12
14
  def initialize(object_attribute_hash = {})
13
15
  @name = "Tracker"
14
- __setobj__(Array.new)
16
+ @frame_table = {}
15
17
  super
16
18
  end
17
19
 
20
+ # Replace all the keyframes of the tracker with new ones
18
21
  def keyframes=(new_kf_array)
19
- __setobj__(new_kf_array.dup)
22
+ @frame_table = {}
23
+ new_kf_array.each do | keyframe |
24
+ @frame_table[keyframe.frame] = keyframe.abs_x, keyframe.abs_y, keyframe.residual
25
+ end
26
+ end
27
+
28
+ # Returns an array of keyframes, ordered by their frame value.
29
+ # WARNING: in older Tracksperanto versions the returned value was
30
+ # a handle into the tracker object. Now it returns a copy of the tracker's keyframes
31
+ # and modifications done to the array WILL NOT propagate to the tracker object itself.
32
+ # If you need to replace a keyframe, use set(keyframe). If you need to replace the whole
33
+ # keyframes array, use keyframes=(new_keyframes)
34
+ def keyframes
35
+ to_a
36
+ end
37
+
38
+ # Sets a keyframe. If an old keyframe exists at this frame offset it will be replaced.
39
+ def set(kf)
40
+ @frame_table[kf.frame] = [kf.abs_x, kf.abs_y, kf.residual]
41
+ end
42
+
43
+ # Iterates over keyframes
44
+ def each
45
+ ordered_frame_numbers.each do | frame |
46
+ yield(extract_keyframe(frame))
47
+ end
20
48
  end
21
-
22
- alias_method :keyframes, :__getobj__
23
49
 
24
50
  # Trackers sort by the position of the first keyframe
25
51
  def <=>(other_tracker)
26
- self[0].frame <=> other_tracker[0].frame
52
+ self.first_frame <=> other_tracker.first_frame
53
+ end
54
+
55
+ # Returns the first frame number this tracker contains (where the first keyframe is)
56
+ def first_frame
57
+ ordered_frame_numbers[0]
27
58
  end
28
59
 
29
60
  # Automatically truncate spaces in the tracker
@@ -32,17 +63,70 @@ class Tracksperanto::Tracker < DelegateClass(Array)
32
63
  @name = n.to_s.gsub(/(\s+)/, '_')
33
64
  end
34
65
 
35
- # Create and save a keyframe in this tracker
66
+ # Create and save a keyframe in this tracker. The options hash is the same
67
+ # as the one for the Keyframe constructor
36
68
  def keyframe!(options)
37
- push(Tracksperanto::Keyframe.new(options))
69
+ kf = Tracksperanto::Keyframe.new(options)
70
+ set(kf)
71
+ end
72
+
73
+ # Tells whether this tracker is empty or not
74
+ def empty?
75
+ @frame_table.empty?
76
+ end
77
+
78
+ # Fetch a keyframe at a spefiic offset.
79
+ # NOTICE: not at a specific **frame** but at an offset in the frames table.
80
+ # The frames table is ordered by frame order. If you need to fetch a keyframe at a specific frame,
81
+ # use at_frame
82
+ def [](offset)
83
+ frame = ordered_frame_numbers[offset]
84
+ return nil if frame.nil?
85
+
86
+ extract_keyframe(frame)
87
+ end
88
+
89
+ # Fetch a keyframe at a specific frame. If no such frame exists nil will be returned
90
+ def at_frame(at_frame)
91
+ extract_keyframe(at_frame)
92
+ end
93
+
94
+ # Add a keyframe. Will raise a Dupe exception if the keyframe to be set will overwrite another one
95
+ def push(kf)
96
+ raise Dupe, "The tracker #{name.inspect} already contains a keyframe at #{kf.frame}" if @frame_table[kf.frame]
97
+ set(kf)
38
98
  end
39
99
 
40
100
  def inspect
41
101
  "<T #{name.inspect} with #{length} keyframes>"
42
102
  end
43
103
 
44
- # Hack - prevents the Tracker to be flattened into keyframes
45
- # when an Array of Trackers gets Array#flatten'ed
46
- def to_ary; end
47
- private :to_ary
104
+ # Used in tests
105
+ def to_ruby
106
+ buf = []
107
+ buf.push("Tracksperanto::Tracker.new(:name => %s) do |t|" % name.inspect)
108
+ each do | kf |
109
+ buf.push(" t.keyframe!(:frame => %d, :abs_x => %0.05f, :abs_y => %0.05f, :residual => %0.05f)" % [kf.frame, kf.abs_x, kf.abs_y, kf.residual])
110
+ end
111
+ buf.push("end")
112
+ buf.join("\n")
113
+ end
114
+
115
+ # Tells how many keyframes this tracker contains
116
+ def length
117
+ @frame_table.length
118
+ end
119
+
120
+ private
121
+
122
+ def ordered_frame_numbers
123
+ @frame_table.keys.sort
124
+ end
125
+
126
+ def extract_keyframe(frame)
127
+ triplet = @frame_table[frame]
128
+ return nil unless triplet
129
+
130
+ Tracksperanto::Keyframe.new(:frame => frame, :abs_x => triplet[0], :abs_y => triplet[1], :residual => triplet[2])
131
+ end
48
132
  end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Syntheyes and some other apps use a relative UV coordinate sustem. For Syntheyes, zero is at the
2
3
  # optical center of the image, and goes positive right and up. Since Tracksperanto works in absolute
3
4
  # pixels we need to convert to and fro.
@@ -19,4 +20,4 @@ module Tracksperanto::UVCoordinates
19
20
  value_off_corner = (uv_value.to_f / 2) + 0.5
20
21
  absolute_side * value_off_corner
21
22
  end
22
- end
23
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Implements the zip_curve_tuples method
2
3
  module Tracksperanto::ZipTuples
3
4
  # Zip arrays of "value at" tuples into an array of "values at" tuples
@@ -19,4 +20,4 @@ module Tracksperanto::ZipTuples
19
20
 
20
21
  tuples.reject{|e| e.nil? || (e.length < (curves.length + 1)) }
21
22
  end
22
- end
23
+ end
data/lib/tracksperanto.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  require 'stringio'
2
3
  require 'delegate'
3
4
  require 'tempfile'
@@ -7,7 +8,7 @@ require "progressive_io"
7
8
 
8
9
  module Tracksperanto
9
10
  PATH = File.expand_path(File.dirname(__FILE__))
10
- VERSION = '2.8.6'
11
+ VERSION = '2.9.0'
11
12
 
12
13
  module Import; end
13
14
  module Export; end
@@ -1,43 +1,43 @@
1
1
  # Size 1920 1080 1.78
2
2
  # Name Parabolic_1_from_top_left
3
3
  0 0 -1.7777777778 1.0000000000 0.0000000000
4
- 0 1 -1.6000000000 0.6200000000 0.0047619048
5
- 0 2 -1.4222222222 0.2800000000 0.0095238095
6
- 0 3 -1.2444444444 -0.0200000000 0.0142857143
7
- 0 4 -1.0666666667 -0.2800000000 0.0190476190
8
- 0 5 -0.8888888889 -0.5000000000 0.0238095238
9
- 0 6 -0.7111111111 -0.6800000000 0.0285714286
10
- 0 7 -0.5333333333 -0.8200000000 0.0333333333
11
- 0 8 -0.3555555556 -0.9200000000 0.0380952381
12
- 0 9 -0.1777777778 -0.9800000000 0.0428571429
13
- 0 12 0.3555555556 -0.9200000000 0.0571428571
14
- 0 13 0.5333333333 -0.8200000000 0.0619047619
15
- 0 14 0.7111111111 -0.6800000000 0.0666666667
16
- 0 15 0.8888888889 -0.5000000000 0.0714285714
17
- 0 16 1.0666666667 -0.2800000000 0.0761904762
18
- 0 17 1.2444444444 -0.0200000000 0.0809523810
19
- 0 18 1.4222222222 0.2800000000 0.0857142857
20
- 0 19 1.6000000000 0.6200000000 0.0904761905
21
- 0 20 1.7777777778 1.0000000000 0.0952380952
4
+ 0 1 -1.6000000000 0.6200000000 0.0047620000
5
+ 0 2 -1.4222222222 0.2800000000 0.0095240000
6
+ 0 3 -1.2444444444 -0.0200000000 0.0142860000
7
+ 0 4 -1.0666666667 -0.2800000000 0.0190480000
8
+ 0 5 -0.8888888889 -0.5000000000 0.0238100000
9
+ 0 6 -0.7111111111 -0.6800000000 0.0285710000
10
+ 0 7 -0.5333333333 -0.8200000000 0.0333330000
11
+ 0 8 -0.3555555556 -0.9200000000 0.0380950000
12
+ 0 9 -0.1777777778 -0.9800000000 0.0428570000
13
+ 0 12 0.3555555556 -0.9200000000 0.0571430000
14
+ 0 13 0.5333333333 -0.8200000000 0.0619050000
15
+ 0 14 0.7111111111 -0.6800000000 0.0666670000
16
+ 0 15 0.8888888889 -0.5000000000 0.0714290000
17
+ 0 16 1.0666666667 -0.2800000000 0.0761900000
18
+ 0 17 1.2444444444 -0.0200000000 0.0809520000
19
+ 0 18 1.4222222222 0.2800000000 0.0857140000
20
+ 0 19 1.6000000000 0.6200000000 0.0904760000
21
+ 0 20 1.7777777778 1.0000000000 0.0952380000
22
22
  # Name Parabolic_2_from_bottom_right
23
23
  1 0 1.7777777778 -1.0000000000 0.0000000000
24
- 1 1 1.6000000000 -0.6200000000 0.0047619048
25
- 1 2 1.4222222222 -0.2800000000 0.0095238095
26
- 1 3 1.2444444444 0.0200000000 0.0142857143
27
- 1 4 1.0666666667 0.2800000000 0.0190476190
28
- 1 5 0.8888888889 0.5000000000 0.0238095238
29
- 1 6 0.7111111111 0.6800000000 0.0285714286
30
- 1 7 0.5333333333 0.8200000000 0.0333333333
31
- 1 8 0.3555555556 0.9200000000 0.0380952381
32
- 1 9 0.1777777778 0.9800000000 0.0428571429
33
- 1 12 -0.3555555556 0.9200000000 0.0571428571
34
- 1 13 -0.5333333333 0.8200000000 0.0619047619
35
- 1 14 -0.7111111111 0.6800000000 0.0666666667
36
- 1 15 -0.8888888889 0.5000000000 0.0714285714
37
- 1 16 -1.0666666667 0.2800000000 0.0761904762
38
- 1 17 -1.2444444444 0.0200000000 0.0809523810
39
- 1 18 -1.4222222222 -0.2800000000 0.0857142857
40
- 1 19 -1.6000000000 -0.6200000000 0.0904761905
41
- 1 20 -1.7777777778 -1.0000000000 0.0952380952
24
+ 1 1 1.6000000000 -0.6200000000 0.0047620000
25
+ 1 2 1.4222222222 -0.2800000000 0.0095240000
26
+ 1 3 1.2444444444 0.0200000000 0.0142860000
27
+ 1 4 1.0666666667 0.2800000000 0.0190480000
28
+ 1 5 0.8888888889 0.5000000000 0.0238100000
29
+ 1 6 0.7111111111 0.6800000000 0.0285710000
30
+ 1 7 0.5333333333 0.8200000000 0.0333330000
31
+ 1 8 0.3555555556 0.9200000000 0.0380950000
32
+ 1 9 0.1777777778 0.9800000000 0.0428570000
33
+ 1 12 -0.3555555556 0.9200000000 0.0571430000
34
+ 1 13 -0.5333333333 0.8200000000 0.0619050000
35
+ 1 14 -0.7111111111 0.6800000000 0.0666670000
36
+ 1 15 -0.8888888889 0.5000000000 0.0714290000
37
+ 1 16 -1.0666666667 0.2800000000 0.0761900000
38
+ 1 17 -1.2444444444 0.0200000000 0.0809520000
39
+ 1 18 -1.4222222222 -0.2800000000 0.0857140000
40
+ 1 19 -1.6000000000 -0.6200000000 0.0904760000
41
+ 1 20 -1.7777777778 -1.0000000000 0.0952380000
42
42
  # Name SingleFrame
43
43
  2 0 0.0185185185 0.0185185185 0.0000000000
@@ -1,43 +1,43 @@
1
1
  # Size 1920 1080 1.78
2
2
  # Name Parabolic_1_from_top_left
3
3
  0 0 -1.7800000000 1.0000000000 0.0000000000
4
- 0 1 -1.6020000000 0.6200000000 0.0047619048
5
- 0 2 -1.4240000000 0.2800000000 0.0095238095
6
- 0 3 -1.2460000000 -0.0200000000 0.0142857143
7
- 0 4 -1.0680000000 -0.2800000000 0.0190476190
8
- 0 5 -0.8900000000 -0.5000000000 0.0238095238
9
- 0 6 -0.7120000000 -0.6800000000 0.0285714286
10
- 0 7 -0.5340000000 -0.8200000000 0.0333333333
11
- 0 8 -0.3560000000 -0.9200000000 0.0380952381
12
- 0 9 -0.1780000000 -0.9800000000 0.0428571429
13
- 0 12 0.3560000000 -0.9200000000 0.0571428571
14
- 0 13 0.5340000000 -0.8200000000 0.0619047619
15
- 0 14 0.7120000000 -0.6800000000 0.0666666667
16
- 0 15 0.8900000000 -0.5000000000 0.0714285714
17
- 0 16 1.0680000000 -0.2800000000 0.0761904762
18
- 0 17 1.2460000000 -0.0200000000 0.0809523810
19
- 0 18 1.4240000000 0.2800000000 0.0857142857
20
- 0 19 1.6020000000 0.6200000000 0.0904761905
21
- 0 20 1.7800000000 1.0000000000 0.0952380952
4
+ 0 1 -1.6020000000 0.6200000000 0.0047620000
5
+ 0 2 -1.4240000000 0.2800000000 0.0095240000
6
+ 0 3 -1.2460000000 -0.0200000000 0.0142860000
7
+ 0 4 -1.0680000000 -0.2800000000 0.0190480000
8
+ 0 5 -0.8900000000 -0.5000000000 0.0238100000
9
+ 0 6 -0.7120000000 -0.6800000000 0.0285710000
10
+ 0 7 -0.5340000000 -0.8200000000 0.0333330000
11
+ 0 8 -0.3560000000 -0.9200000000 0.0380950000
12
+ 0 9 -0.1780000000 -0.9800000000 0.0428570000
13
+ 0 12 0.3560000000 -0.9200000000 0.0571430000
14
+ 0 13 0.5340000000 -0.8200000000 0.0619050000
15
+ 0 14 0.7120000000 -0.6800000000 0.0666670000
16
+ 0 15 0.8900000000 -0.5000000000 0.0714290000
17
+ 0 16 1.0680000000 -0.2800000000 0.0761900000
18
+ 0 17 1.2460000000 -0.0200000000 0.0809520000
19
+ 0 18 1.4240000000 0.2800000000 0.0857140000
20
+ 0 19 1.6020000000 0.6200000000 0.0904760000
21
+ 0 20 1.7800000000 1.0000000000 0.0952380000
22
22
  # Name Parabolic_2_from_bottom_right
23
23
  1 0 1.7800000000 -1.0000000000 0.0000000000
24
- 1 1 1.6020000000 -0.6200000000 0.0047619048
25
- 1 2 1.4240000000 -0.2800000000 0.0095238095
26
- 1 3 1.2460000000 0.0200000000 0.0142857143
27
- 1 4 1.0680000000 0.2800000000 0.0190476190
28
- 1 5 0.8900000000 0.5000000000 0.0238095238
29
- 1 6 0.7120000000 0.6800000000 0.0285714286
30
- 1 7 0.5340000000 0.8200000000 0.0333333333
31
- 1 8 0.3560000000 0.9200000000 0.0380952381
32
- 1 9 0.1780000000 0.9800000000 0.0428571429
33
- 1 12 -0.3560000000 0.9200000000 0.0571428571
34
- 1 13 -0.5340000000 0.8200000000 0.0619047619
35
- 1 14 -0.7120000000 0.6800000000 0.0666666667
36
- 1 15 -0.8900000000 0.5000000000 0.0714285714
37
- 1 16 -1.0680000000 0.2800000000 0.0761904762
38
- 1 17 -1.2460000000 0.0200000000 0.0809523810
39
- 1 18 -1.4240000000 -0.2800000000 0.0857142857
40
- 1 19 -1.6020000000 -0.6200000000 0.0904761905
41
- 1 20 -1.7800000000 -1.0000000000 0.0952380952
24
+ 1 1 1.6020000000 -0.6200000000 0.0047620000
25
+ 1 2 1.4240000000 -0.2800000000 0.0095240000
26
+ 1 3 1.2460000000 0.0200000000 0.0142860000
27
+ 1 4 1.0680000000 0.2800000000 0.0190480000
28
+ 1 5 0.8900000000 0.5000000000 0.0238100000
29
+ 1 6 0.7120000000 0.6800000000 0.0285710000
30
+ 1 7 0.5340000000 0.8200000000 0.0333330000
31
+ 1 8 0.3560000000 0.9200000000 0.0380950000
32
+ 1 9 0.1780000000 0.9800000000 0.0428570000
33
+ 1 12 -0.3560000000 0.9200000000 0.0571430000
34
+ 1 13 -0.5340000000 0.8200000000 0.0619050000
35
+ 1 14 -0.7120000000 0.6800000000 0.0666670000
36
+ 1 15 -0.8900000000 0.5000000000 0.0714290000
37
+ 1 16 -1.0680000000 0.2800000000 0.0761900000
38
+ 1 17 -1.2460000000 0.0200000000 0.0809520000
39
+ 1 18 -1.4240000000 -0.2800000000 0.0857140000
40
+ 1 19 -1.6020000000 -0.6200000000 0.0904760000
41
+ 1 20 -1.7800000000 -1.0000000000 0.0952380000
42
42
  # Name SingleFrame
43
43
  2 0 0.0185416667 0.0185185185 0.0000000000
@@ -0,0 +1,54 @@
1
+ require 'rubygems'
2
+ require 'tracksperanto'
3
+ width = 1920
4
+ height = 1080
5
+ trackers = []
6
+
7
+ trackers << Tracksperanto::Tracker.new(:name => "Parabolic_1_from_top_left") do |t|
8
+ t.keyframe!(:frame => 0, :abs_x => 0.00000, :abs_y => 1080.00000, :residual => 0.00000)
9
+ t.keyframe!(:frame => 1, :abs_x => 96.00000, :abs_y => 874.80000, :residual => 0.04762)
10
+ t.keyframe!(:frame => 2, :abs_x => 192.00000, :abs_y => 691.20000, :residual => 0.09524)
11
+ t.keyframe!(:frame => 3, :abs_x => 288.00000, :abs_y => 529.20000, :residual => 0.14286)
12
+ t.keyframe!(:frame => 4, :abs_x => 384.00000, :abs_y => 388.80000, :residual => 0.19048)
13
+ t.keyframe!(:frame => 5, :abs_x => 480.00000, :abs_y => 270.00000, :residual => 0.23810)
14
+ t.keyframe!(:frame => 6, :abs_x => 576.00000, :abs_y => 172.80000, :residual => 0.28571)
15
+ t.keyframe!(:frame => 7, :abs_x => 672.00000, :abs_y => 97.20000, :residual => 0.33333)
16
+ t.keyframe!(:frame => 8, :abs_x => 768.00000, :abs_y => 43.20000, :residual => 0.38095)
17
+ t.keyframe!(:frame => 9, :abs_x => 864.00000, :abs_y => 10.80000, :residual => 0.42857)
18
+ t.keyframe!(:frame => 12, :abs_x => 1152.00000, :abs_y => 43.20000, :residual => 0.57143)
19
+ t.keyframe!(:frame => 13, :abs_x => 1248.00000, :abs_y => 97.20000, :residual => 0.61905)
20
+ t.keyframe!(:frame => 14, :abs_x => 1344.00000, :abs_y => 172.80000, :residual => 0.66667)
21
+ t.keyframe!(:frame => 15, :abs_x => 1440.00000, :abs_y => 270.00000, :residual => 0.71429)
22
+ t.keyframe!(:frame => 16, :abs_x => 1536.00000, :abs_y => 388.80000, :residual => 0.76190)
23
+ t.keyframe!(:frame => 17, :abs_x => 1632.00000, :abs_y => 529.20000, :residual => 0.80952)
24
+ t.keyframe!(:frame => 18, :abs_x => 1728.00000, :abs_y => 691.20000, :residual => 0.85714)
25
+ t.keyframe!(:frame => 19, :abs_x => 1824.00000, :abs_y => 874.80000, :residual => 0.90476)
26
+ t.keyframe!(:frame => 20, :abs_x => 1920.00000, :abs_y => 1080.00000, :residual => 0.95238)
27
+ end
28
+
29
+ trackers << Tracksperanto::Tracker.new(:name => "Parabolic_2_from_bottom_right") do |t|
30
+ t.keyframe!(:frame => 0, :abs_x => 1920.00000, :abs_y => 0.00000, :residual => 0.00000)
31
+ t.keyframe!(:frame => 1, :abs_x => 1824.00000, :abs_y => 205.20000, :residual => 0.04762)
32
+ t.keyframe!(:frame => 2, :abs_x => 1728.00000, :abs_y => 388.80000, :residual => 0.09524)
33
+ t.keyframe!(:frame => 3, :abs_x => 1632.00000, :abs_y => 550.80000, :residual => 0.14286)
34
+ t.keyframe!(:frame => 4, :abs_x => 1536.00000, :abs_y => 691.20000, :residual => 0.19048)
35
+ t.keyframe!(:frame => 5, :abs_x => 1440.00000, :abs_y => 810.00000, :residual => 0.23810)
36
+ t.keyframe!(:frame => 6, :abs_x => 1344.00000, :abs_y => 907.20000, :residual => 0.28571)
37
+ t.keyframe!(:frame => 7, :abs_x => 1248.00000, :abs_y => 982.80000, :residual => 0.33333)
38
+ t.keyframe!(:frame => 8, :abs_x => 1152.00000, :abs_y => 1036.80000, :residual => 0.38095)
39
+ t.keyframe!(:frame => 9, :abs_x => 1056.00000, :abs_y => 1069.20000, :residual => 0.42857)
40
+ t.keyframe!(:frame => 12, :abs_x => 768.00000, :abs_y => 1036.80000, :residual => 0.57143)
41
+ t.keyframe!(:frame => 13, :abs_x => 672.00000, :abs_y => 982.80000, :residual => 0.61905)
42
+ t.keyframe!(:frame => 14, :abs_x => 576.00000, :abs_y => 907.20000, :residual => 0.66667)
43
+ t.keyframe!(:frame => 15, :abs_x => 480.00000, :abs_y => 810.00000, :residual => 0.71429)
44
+ t.keyframe!(:frame => 16, :abs_x => 384.00000, :abs_y => 691.20000, :residual => 0.76190)
45
+ t.keyframe!(:frame => 17, :abs_x => 288.00000, :abs_y => 550.80000, :residual => 0.80952)
46
+ t.keyframe!(:frame => 18, :abs_x => 192.00000, :abs_y => 388.80000, :residual => 0.85714)
47
+ t.keyframe!(:frame => 19, :abs_x => 96.00000, :abs_y => 205.20000, :residual => 0.90476)
48
+ t.keyframe!(:frame => 20, :abs_x => 0.00000, :abs_y => 0.00000, :residual => 0.95238)
49
+ end
50
+
51
+ trackers << Tracksperanto::Tracker.new(:name => "SingleFrame") do |t|
52
+ t.keyframe!(:frame => 0, :abs_x => 970.00000, :abs_y => 550.00000, :residual => 0.00000)
53
+ end
54
+
@@ -41,3 +41,4 @@ Parabolic_2_from_bottom_right 18 288.000 529.200
41
41
  Parabolic_2_from_bottom_right 19 192.000 691.200
42
42
  Parabolic_2_from_bottom_right 20 96.000 874.800
43
43
  Parabolic_2_from_bottom_right 21 0.000 1080.000
44
+ SingleFrame 1 970.000 530.000
@@ -3,45 +3,45 @@ Parabolic_1_from_top_left
3
3
  0
4
4
  19
5
5
  1 0.000000000000000 1080.000000000000000
6
- 2 95.999999999999972 874.800000000000068
7
- 3 191.999999999999943 691.200000000000159
8
- 4 288.000000000000057 529.199999999999932
6
+ 2 96.000000000000000 874.799999999999955
7
+ 3 192.000000000000000 691.200000000000045
8
+ 4 288.000000000000000 529.200000000000045
9
9
  5 384.000000000000000 388.800000000000011
10
10
  6 480.000000000000000 270.000000000000000
11
- 7 576.000000000000000 172.800000000000040
11
+ 7 576.000000000000000 172.800000000000011
12
12
  8 672.000000000000000 97.200000000000003
13
- 9 768.000000000000000 43.200000000000010
14
- 10 864.000000000000000 10.800000000000002
15
- 13 1152.000000000000000 43.200000000000010
13
+ 9 768.000000000000000 43.200000000000003
14
+ 10 864.000000000000000 10.800000000000001
15
+ 13 1152.000000000000000 43.200000000000003
16
16
  14 1248.000000000000000 97.200000000000003
17
- 15 1344.000000000000000 172.800000000000040
17
+ 15 1344.000000000000000 172.800000000000011
18
18
  16 1440.000000000000000 270.000000000000000
19
19
  17 1536.000000000000000 388.800000000000011
20
- 18 1632.000000000000000 529.199999999999932
21
- 19 1728.000000000000000 691.200000000000159
22
- 20 1824.000000000000000 874.800000000000068
20
+ 18 1632.000000000000000 529.200000000000045
21
+ 19 1728.000000000000000 691.200000000000045
22
+ 20 1824.000000000000000 874.799999999999955
23
23
  21 1920.000000000000000 1080.000000000000000
24
24
  Parabolic_2_from_bottom_right
25
25
  0
26
26
  19
27
27
  1 1920.000000000000000 0.000000000000000
28
- 2 1824.000000000000000 205.199999999999932
29
- 3 1728.000000000000000 388.799999999999841
28
+ 2 1824.000000000000000 205.199999999999989
29
+ 3 1728.000000000000000 388.800000000000011
30
30
  4 1632.000000000000000 550.799999999999955
31
31
  5 1536.000000000000000 691.200000000000045
32
32
  6 1440.000000000000000 810.000000000000000
33
- 7 1344.000000000000000 907.199999999999932
34
- 8 1248.000000000000000 982.800000000000068
33
+ 7 1344.000000000000000 907.200000000000045
34
+ 8 1248.000000000000000 982.799999999999955
35
35
  9 1152.000000000000000 1036.799999999999955
36
36
  10 1056.000000000000000 1069.200000000000045
37
37
  13 768.000000000000000 1036.799999999999955
38
- 14 672.000000000000000 982.800000000000068
39
- 15 576.000000000000000 907.199999999999932
38
+ 14 672.000000000000000 982.799999999999955
39
+ 15 576.000000000000000 907.200000000000045
40
40
  16 480.000000000000000 810.000000000000000
41
41
  17 384.000000000000000 691.200000000000045
42
- 18 288.000000000000057 550.799999999999955
43
- 19 191.999999999999943 388.799999999999841
44
- 20 95.999999999999972 205.199999999999932
42
+ 18 288.000000000000000 550.799999999999955
43
+ 19 192.000000000000000 388.800000000000011
44
+ 20 96.000000000000000 205.199999999999989
45
45
  21 0.000000000000000 0.000000000000000
46
46
  SingleFrame
47
47
  0
@@ -5,46 +5,46 @@ imageSequence "Sequence 01"
5
5
  pointTrack "Parabolic_1_from_top_left" rgb( 255 0 0 )
6
6
  {
7
7
  1 0.000 0.000 ki( 0.8 ) s( 66 66 64 64 ) p( 24 24 25 25 )
8
- 2 96.000 205.200 p+( 0.952381 )
9
- 3 192.000 388.800 p+( 0.904762 )
10
- 4 288.000 550.800 p+( 0.857143 )
11
- 5 384.000 691.200 p+( 0.809524 )
12
- 6 480.000 810.000 p+( 0.761905 )
13
- 7 576.000 907.200 p+( 0.714286 )
14
- 8 672.000 982.800 p+( 0.666667 )
15
- 9 768.000 1036.800 p+( 0.619048 )
16
- 10 864.000 1069.200 p+( 0.571429 )
17
- 13 1152.000 1036.800 p+( 0.428571 )
18
- 14 1248.000 982.800 p+( 0.380952 )
19
- 15 1344.000 907.200 p+( 0.333333 )
20
- 16 1440.000 810.000 p+( 0.285714 )
21
- 17 1536.000 691.200 p+( 0.238095 )
22
- 18 1632.000 550.800 p+( 0.190476 )
23
- 19 1728.000 388.800 p+( 0.142857 )
24
- 20 1824.000 205.200 p+( 0.095238 )
25
- 21 1920.000 0.000 p+( 0.047619 )
8
+ 2 96.000 205.200 p+( 0.952380 )
9
+ 3 192.000 388.800 p+( 0.904760 )
10
+ 4 288.000 550.800 p+( 0.857140 )
11
+ 5 384.000 691.200 p+( 0.809520 )
12
+ 6 480.000 810.000 p+( 0.761900 )
13
+ 7 576.000 907.200 p+( 0.714290 )
14
+ 8 672.000 982.800 p+( 0.666670 )
15
+ 9 768.000 1036.800 p+( 0.619050 )
16
+ 10 864.000 1069.200 p+( 0.571430 )
17
+ 13 1152.000 1036.800 p+( 0.428570 )
18
+ 14 1248.000 982.800 p+( 0.380950 )
19
+ 15 1344.000 907.200 p+( 0.333330 )
20
+ 16 1440.000 810.000 p+( 0.285710 )
21
+ 17 1536.000 691.200 p+( 0.238100 )
22
+ 18 1632.000 550.800 p+( 0.190480 )
23
+ 19 1728.000 388.800 p+( 0.142860 )
24
+ 20 1824.000 205.200 p+( 0.095240 )
25
+ 21 1920.000 0.000 p+( 0.047620 )
26
26
  }
27
27
  pointTrack "Parabolic_2_from_bottom_right" rgb( 255 0 0 )
28
28
  {
29
29
  1 1920.000 1080.000 ki( 0.8 ) s( 66 66 64 64 ) p( 24 24 25 25 )
30
- 2 1824.000 874.800 p+( 0.952381 )
31
- 3 1728.000 691.200 p+( 0.904762 )
32
- 4 1632.000 529.200 p+( 0.857143 )
33
- 5 1536.000 388.800 p+( 0.809524 )
34
- 6 1440.000 270.000 p+( 0.761905 )
35
- 7 1344.000 172.800 p+( 0.714286 )
36
- 8 1248.000 97.200 p+( 0.666667 )
37
- 9 1152.000 43.200 p+( 0.619048 )
38
- 10 1056.000 10.800 p+( 0.571429 )
39
- 13 768.000 43.200 p+( 0.428571 )
40
- 14 672.000 97.200 p+( 0.380952 )
41
- 15 576.000 172.800 p+( 0.333333 )
42
- 16 480.000 270.000 p+( 0.285714 )
43
- 17 384.000 388.800 p+( 0.238095 )
44
- 18 288.000 529.200 p+( 0.190476 )
45
- 19 192.000 691.200 p+( 0.142857 )
46
- 20 96.000 874.800 p+( 0.095238 )
47
- 21 0.000 1080.000 p+( 0.047619 )
30
+ 2 1824.000 874.800 p+( 0.952380 )
31
+ 3 1728.000 691.200 p+( 0.904760 )
32
+ 4 1632.000 529.200 p+( 0.857140 )
33
+ 5 1536.000 388.800 p+( 0.809520 )
34
+ 6 1440.000 270.000 p+( 0.761900 )
35
+ 7 1344.000 172.800 p+( 0.714290 )
36
+ 8 1248.000 97.200 p+( 0.666670 )
37
+ 9 1152.000 43.200 p+( 0.619050 )
38
+ 10 1056.000 10.800 p+( 0.571430 )
39
+ 13 768.000 43.200 p+( 0.428570 )
40
+ 14 672.000 97.200 p+( 0.380950 )
41
+ 15 576.000 172.800 p+( 0.333330 )
42
+ 16 480.000 270.000 p+( 0.285710 )
43
+ 17 384.000 388.800 p+( 0.238100 )
44
+ 18 288.000 529.200 p+( 0.190480 )
45
+ 19 192.000 691.200 p+( 0.142860 )
46
+ 20 96.000 874.800 p+( 0.095240 )
47
+ 21 0.000 1080.000 p+( 0.047620 )
48
48
  }
49
49
  pointTrack "SingleFrame" rgb( 255 0 0 )
50
50
  {
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  require File.expand_path(File.dirname(__FILE__)) + '/../helper'
2
3
 
3
4
  class NukeExportTest < Test::Unit::TestCase
@@ -14,4 +15,4 @@ class NukeExportTest < Test::Unit::TestCase
14
15
  assert_equal "boujou_text.txt", Tracksperanto::Export::Boujou.desc_and_extension
15
16
  assert_equal "boujou feature tracks", Tracksperanto::Export::Boujou.human_name
16
17
  end
17
- end
18
+ end