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.
- data/DEVELOPER_DOCS.rdoc +17 -5
- data/History.txt +8 -0
- data/README.rdoc +2 -0
- data/lib/export/base.rb +1 -0
- data/lib/export/boujou.rb +2 -1
- data/lib/export/equalizer3.rb +1 -0
- data/lib/export/equalizer4.rb +1 -0
- data/lib/export/flame_stabilizer.rb +1 -0
- data/lib/export/flame_stabilizer_cornerpin.rb +1 -0
- data/lib/export/match_mover.rb +2 -1
- data/lib/export/maya_live.rb +2 -1
- data/lib/export/mux.rb +1 -0
- data/lib/export/nuke_script.rb +2 -1
- data/lib/export/pfmatchit.rb +2 -1
- data/lib/export/pftrack.rb +2 -1
- data/lib/export/pftrack_5.rb +2 -1
- data/lib/export/ruby.rb +38 -0
- data/lib/export/shake_text.rb +2 -1
- data/lib/export/syntheyes.rb +1 -0
- data/lib/import/base.rb +2 -1
- data/lib/import/boujou.rb +2 -1
- data/lib/import/equalizer3.rb +2 -1
- data/lib/import/equalizer4.rb +2 -1
- data/lib/import/flame_stabilizer.rb +2 -1
- data/lib/import/match_mover.rb +3 -2
- data/lib/import/maya_live.rb +2 -1
- data/lib/import/nuke_grammar/utils.rb +2 -1
- data/lib/import/nuke_script.rb +2 -1
- data/lib/import/pftrack.rb +2 -1
- data/lib/import/shake_grammar/catcher.rb +2 -1
- data/lib/import/shake_grammar/lexer.rb +2 -1
- data/lib/import/shake_script.rb +2 -1
- data/lib/import/shake_text.rb +1 -0
- data/lib/import/syntheyes.rb +2 -1
- data/lib/middleware/base.rb +1 -0
- data/lib/middleware/crop.rb +2 -1
- data/lib/middleware/flip.rb +2 -1
- data/lib/middleware/flop.rb +2 -1
- data/lib/middleware/golden.rb +2 -1
- data/lib/middleware/length_cutoff.rb +2 -1
- data/lib/middleware/lerp.rb +2 -1
- data/lib/middleware/lint.rb +2 -1
- data/lib/middleware/pad.rb +2 -1
- data/lib/middleware/prefix.rb +2 -1
- data/lib/middleware/reformat.rb +2 -1
- data/lib/middleware/scaler.rb +2 -1
- data/lib/middleware/shift.rb +2 -1
- data/lib/middleware/slipper.rb +2 -1
- data/lib/middleware/start_trim.rb +2 -1
- data/lib/pipeline/base.rb +2 -1
- data/lib/tracksperanto/block_init.rb +1 -0
- data/lib/tracksperanto/buffer_io.rb +2 -1
- data/lib/tracksperanto/buffering_reader.rb +2 -1
- data/lib/tracksperanto/casts.rb +2 -1
- data/lib/tracksperanto/const_name.rb +2 -1
- data/lib/tracksperanto/ext_io.rb +2 -1
- data/lib/tracksperanto/format_detector.rb +2 -1
- data/lib/tracksperanto/keyframe.rb +4 -4
- data/lib/tracksperanto/returning.rb +2 -1
- data/lib/tracksperanto/safety.rb +2 -1
- data/lib/tracksperanto/simple_export.rb +1 -0
- data/lib/tracksperanto/tracker.rb +99 -15
- data/lib/tracksperanto/uv_coordinates.rb +2 -1
- data/lib/tracksperanto/zip_tuples.rb +2 -1
- data/lib/tracksperanto.rb +2 -1
- data/test/export/samples/ref_Mayalive.txt +36 -36
- data/test/export/samples/ref_Mayalive_CustomAspect.txt +36 -36
- data/test/export/samples/ref_Ruby.rb +54 -0
- data/test/export/samples/ref_boujou.txt +1 -0
- data/test/export/samples/ref_equalizer.txt +20 -20
- data/test/export/samples/ref_matchmover.rz2 +36 -36
- data/test/export/test_boujou_export.rb +2 -1
- data/test/export/test_equalizer3_export.rb +2 -1
- data/test/export/test_equalizer_export.rb +2 -3
- data/test/export/test_flame_stabilizer_cornerpin_export.rb +2 -1
- data/test/export/test_flame_stabilizer_export.rb +2 -1
- data/test/export/test_match_mover_export.rb +2 -1
- data/test/export/test_maya_live_export.rb +2 -1
- data/test/export/test_mux.rb +1 -0
- data/test/export/test_nuke_export.rb +2 -1
- data/test/export/test_pfmatchit_export.rb +2 -1
- data/test/export/test_pftrack5_export.rb +2 -1
- data/test/export/test_pftrack_export.rb +2 -1
- data/test/export/test_ruby_export.rb +17 -0
- data/test/export/test_shake_export.rb +2 -1
- data/test/export/test_syntheyes_export.rb +1 -0
- data/test/helper.rb +48 -54
- data/test/import/test_3de_import.rb +2 -1
- data/test/import/test_3de_import3.rb +2 -1
- data/test/import/test_boujou_import.rb +2 -1
- data/test/import/test_flame_import.rb +2 -1
- data/test/import/test_match_mover_import.rb +3 -1
- data/test/import/test_maya_live_import.rb +2 -1
- data/test/import/test_nuke_import.rb +2 -1
- data/test/import/test_pftrack_import.rb +2 -1
- data/test/import/test_shake_catcher.rb +2 -1
- data/test/import/test_shake_lexer.rb +2 -1
- data/test/import/test_shake_script_import.rb +2 -1
- data/test/import/test_shake_text_import.rb +2 -1
- data/test/import/test_syntheyes_import.rb +2 -1
- data/test/middleware/test_crop_middleware.rb +2 -1
- data/test/middleware/test_flip_middleware.rb +2 -1
- data/test/middleware/test_flop_middleware.rb +1 -0
- data/test/middleware/test_golden_middleware.rb +2 -1
- data/test/middleware/test_length_cutoff_middleware.rb +2 -1
- data/test/middleware/test_lerp_middleware.rb +2 -1
- data/test/middleware/test_lint_middleware.rb +2 -1
- data/test/middleware/test_pad_middleware.rb +2 -1
- data/test/middleware/test_prefix.rb +2 -1
- data/test/middleware/test_reformat_middleware.rb +2 -1
- data/test/middleware/test_scaler_middleware.rb +2 -1
- data/test/middleware/test_shift_middleware.rb +2 -1
- data/test/middleware/test_slip_middleware.rb +2 -1
- data/test/middleware/test_start_trim_middleware.rb +2 -1
- data/test/test_buffer_io.rb +2 -1
- data/test/test_bufferingreader.rb +2 -1
- data/test/test_cli.rb +4 -2
- data/test/test_const_name.rb +2 -1
- data/test/test_extio.rb +2 -1
- data/test/test_format_detector.rb +2 -1
- data/test/test_keyframe.rb +15 -1
- data/test/test_pipeline.rb +2 -1
- data/test/test_simple_export.rb +2 -1
- data/test/test_tracker.rb +86 -12
- data/test/test_tracksperanto.rb +2 -1
- data/tracksperanto.gemspec +5 -2
- 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
|
data/lib/tracksperanto/ext_io.rb
CHANGED
|
@@ -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
|
data/lib/tracksperanto/safety.rb
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
#
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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.
|
|
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.
|
|
5
|
-
0 2 -1.4222222222 0.2800000000 0.
|
|
6
|
-
0 3 -1.2444444444 -0.0200000000 0.
|
|
7
|
-
0 4 -1.0666666667 -0.2800000000 0.
|
|
8
|
-
0 5 -0.8888888889 -0.5000000000 0.
|
|
9
|
-
0 6 -0.7111111111 -0.6800000000 0.
|
|
10
|
-
0 7 -0.5333333333 -0.8200000000 0.
|
|
11
|
-
0 8 -0.3555555556 -0.9200000000 0.
|
|
12
|
-
0 9 -0.1777777778 -0.9800000000 0.
|
|
13
|
-
0 12 0.3555555556 -0.9200000000 0.
|
|
14
|
-
0 13 0.5333333333 -0.8200000000 0.
|
|
15
|
-
0 14 0.7111111111 -0.6800000000 0.
|
|
16
|
-
0 15 0.8888888889 -0.5000000000 0.
|
|
17
|
-
0 16 1.0666666667 -0.2800000000 0.
|
|
18
|
-
0 17 1.2444444444 -0.0200000000 0.
|
|
19
|
-
0 18 1.4222222222 0.2800000000 0.
|
|
20
|
-
0 19 1.6000000000 0.6200000000 0.
|
|
21
|
-
0 20 1.7777777778 1.0000000000 0.
|
|
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.
|
|
25
|
-
1 2 1.4222222222 -0.2800000000 0.
|
|
26
|
-
1 3 1.2444444444 0.0200000000 0.
|
|
27
|
-
1 4 1.0666666667 0.2800000000 0.
|
|
28
|
-
1 5 0.8888888889 0.5000000000 0.
|
|
29
|
-
1 6 0.7111111111 0.6800000000 0.
|
|
30
|
-
1 7 0.5333333333 0.8200000000 0.
|
|
31
|
-
1 8 0.3555555556 0.9200000000 0.
|
|
32
|
-
1 9 0.1777777778 0.9800000000 0.
|
|
33
|
-
1 12 -0.3555555556 0.9200000000 0.
|
|
34
|
-
1 13 -0.5333333333 0.8200000000 0.
|
|
35
|
-
1 14 -0.7111111111 0.6800000000 0.
|
|
36
|
-
1 15 -0.8888888889 0.5000000000 0.
|
|
37
|
-
1 16 -1.0666666667 0.2800000000 0.
|
|
38
|
-
1 17 -1.2444444444 0.0200000000 0.
|
|
39
|
-
1 18 -1.4222222222 -0.2800000000 0.
|
|
40
|
-
1 19 -1.6000000000 -0.6200000000 0.
|
|
41
|
-
1 20 -1.7777777778 -1.0000000000 0.
|
|
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.
|
|
5
|
-
0 2 -1.4240000000 0.2800000000 0.
|
|
6
|
-
0 3 -1.2460000000 -0.0200000000 0.
|
|
7
|
-
0 4 -1.0680000000 -0.2800000000 0.
|
|
8
|
-
0 5 -0.8900000000 -0.5000000000 0.
|
|
9
|
-
0 6 -0.7120000000 -0.6800000000 0.
|
|
10
|
-
0 7 -0.5340000000 -0.8200000000 0.
|
|
11
|
-
0 8 -0.3560000000 -0.9200000000 0.
|
|
12
|
-
0 9 -0.1780000000 -0.9800000000 0.
|
|
13
|
-
0 12 0.3560000000 -0.9200000000 0.
|
|
14
|
-
0 13 0.5340000000 -0.8200000000 0.
|
|
15
|
-
0 14 0.7120000000 -0.6800000000 0.
|
|
16
|
-
0 15 0.8900000000 -0.5000000000 0.
|
|
17
|
-
0 16 1.0680000000 -0.2800000000 0.
|
|
18
|
-
0 17 1.2460000000 -0.0200000000 0.
|
|
19
|
-
0 18 1.4240000000 0.2800000000 0.
|
|
20
|
-
0 19 1.6020000000 0.6200000000 0.
|
|
21
|
-
0 20 1.7800000000 1.0000000000 0.
|
|
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.
|
|
25
|
-
1 2 1.4240000000 -0.2800000000 0.
|
|
26
|
-
1 3 1.2460000000 0.0200000000 0.
|
|
27
|
-
1 4 1.0680000000 0.2800000000 0.
|
|
28
|
-
1 5 0.8900000000 0.5000000000 0.
|
|
29
|
-
1 6 0.7120000000 0.6800000000 0.
|
|
30
|
-
1 7 0.5340000000 0.8200000000 0.
|
|
31
|
-
1 8 0.3560000000 0.9200000000 0.
|
|
32
|
-
1 9 0.1780000000 0.9800000000 0.
|
|
33
|
-
1 12 -0.3560000000 0.9200000000 0.
|
|
34
|
-
1 13 -0.5340000000 0.8200000000 0.
|
|
35
|
-
1 14 -0.7120000000 0.6800000000 0.
|
|
36
|
-
1 15 -0.8900000000 0.5000000000 0.
|
|
37
|
-
1 16 -1.0680000000 0.2800000000 0.
|
|
38
|
-
1 17 -1.2460000000 0.0200000000 0.
|
|
39
|
-
1 18 -1.4240000000 -0.2800000000 0.
|
|
40
|
-
1 19 -1.6020000000 -0.6200000000 0.
|
|
41
|
-
1 20 -1.7800000000 -1.0000000000 0.
|
|
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
|
+
|
|
@@ -3,45 +3,45 @@ Parabolic_1_from_top_left
|
|
|
3
3
|
0
|
|
4
4
|
19
|
|
5
5
|
1 0.000000000000000 1080.000000000000000
|
|
6
|
-
2
|
|
7
|
-
3
|
|
8
|
-
4 288.
|
|
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.
|
|
11
|
+
7 576.000000000000000 172.800000000000011
|
|
12
12
|
8 672.000000000000000 97.200000000000003
|
|
13
|
-
9 768.000000000000000 43.
|
|
14
|
-
10 864.000000000000000 10.
|
|
15
|
-
13 1152.000000000000000 43.
|
|
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.
|
|
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.
|
|
21
|
-
19 1728.000000000000000 691.
|
|
22
|
-
20 1824.000000000000000 874.
|
|
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.
|
|
29
|
-
3 1728.000000000000000 388.
|
|
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.
|
|
34
|
-
8 1248.000000000000000 982.
|
|
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.
|
|
39
|
-
15 576.000000000000000 907.
|
|
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.
|
|
43
|
-
19
|
|
44
|
-
20
|
|
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.
|
|
9
|
-
3 192.000 388.800 p+( 0.
|
|
10
|
-
4 288.000 550.800 p+( 0.
|
|
11
|
-
5 384.000 691.200 p+( 0.
|
|
12
|
-
6 480.000 810.000 p+( 0.
|
|
13
|
-
7 576.000 907.200 p+( 0.
|
|
14
|
-
8 672.000 982.800 p+( 0.
|
|
15
|
-
9 768.000 1036.800 p+( 0.
|
|
16
|
-
10 864.000 1069.200 p+( 0.
|
|
17
|
-
13 1152.000 1036.800 p+( 0.
|
|
18
|
-
14 1248.000 982.800 p+( 0.
|
|
19
|
-
15 1344.000 907.200 p+( 0.
|
|
20
|
-
16 1440.000 810.000 p+( 0.
|
|
21
|
-
17 1536.000 691.200 p+( 0.
|
|
22
|
-
18 1632.000 550.800 p+( 0.
|
|
23
|
-
19 1728.000 388.800 p+( 0.
|
|
24
|
-
20 1824.000 205.200 p+( 0.
|
|
25
|
-
21 1920.000 0.000 p+( 0.
|
|
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.
|
|
31
|
-
3 1728.000 691.200 p+( 0.
|
|
32
|
-
4 1632.000 529.200 p+( 0.
|
|
33
|
-
5 1536.000 388.800 p+( 0.
|
|
34
|
-
6 1440.000 270.000 p+( 0.
|
|
35
|
-
7 1344.000 172.800 p+( 0.
|
|
36
|
-
8 1248.000 97.200 p+( 0.
|
|
37
|
-
9 1152.000 43.200 p+( 0.
|
|
38
|
-
10 1056.000 10.800 p+( 0.
|
|
39
|
-
13 768.000 43.200 p+( 0.
|
|
40
|
-
14 672.000 97.200 p+( 0.
|
|
41
|
-
15 576.000 172.800 p+( 0.
|
|
42
|
-
16 480.000 270.000 p+( 0.
|
|
43
|
-
17 384.000 388.800 p+( 0.
|
|
44
|
-
18 288.000 529.200 p+( 0.
|
|
45
|
-
19 192.000 691.200 p+( 0.
|
|
46
|
-
20 96.000 874.800 p+( 0.
|
|
47
|
-
21 0.000 1080.000 p+( 0.
|
|
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
|