tracksperanto 2.9.2 → 2.9.3
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 +4 -0
- data/lib/export/cosa.rb +44 -0
- data/lib/tracksperanto.rb +1 -1
- data/test/export/samples/ref_AfterEffects.jsx +62 -0
- data/test/export/test_ae_export.rb +17 -0
- data/test/helper.rb +5 -1
- data/test/test_cli.rb +1 -1
- data/tracksperanto.gemspec +5 -2
- metadata +23 -20
data/History.txt
CHANGED
data/lib/export/cosa.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
# Export each tracker as an AfterEffects script creating nulls
|
3
|
+
class Tracksperanto::Export::AE < Tracksperanto::Export::Base
|
4
|
+
|
5
|
+
PREAMBLE = 'function convertFrameToSeconds(layerWithFootage, frameValue)
|
6
|
+
{
|
7
|
+
var comp = layerWithFootage.containingComp;
|
8
|
+
var rate = 1.0 / comp.frameDuration;
|
9
|
+
// Frames in AE are 0-based by default
|
10
|
+
return (frameValue) / rate;
|
11
|
+
}'
|
12
|
+
|
13
|
+
def self.desc_and_extension
|
14
|
+
"createNulls.jsx"
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.human_name
|
18
|
+
"AfterEffects .jsx script generating null layers"
|
19
|
+
end
|
20
|
+
|
21
|
+
def start_export(w, h)
|
22
|
+
@io.puts(PREAMBLE)
|
23
|
+
@io.puts("")
|
24
|
+
@count = 0
|
25
|
+
@height = h
|
26
|
+
end
|
27
|
+
|
28
|
+
def start_tracker_segment(tracker_name)
|
29
|
+
@io.puts("")
|
30
|
+
@io.puts('var layer%d = app.project.activeItem.layers.addNull();' % @count)
|
31
|
+
@io.puts( 'layer%d.name = %s;' % [@count, tracker_name.inspect])
|
32
|
+
@io.puts("")
|
33
|
+
@io.puts('var pos = layer%d.property("Transform").property("Position");' % @count)
|
34
|
+
end
|
35
|
+
|
36
|
+
def export_point(frame, abs_float_x, abs_float_y, float_residual)
|
37
|
+
@io.puts('pos.setValueAtTime(convertFrameToSeconds(layer%d, %d), [%0.5f,%0.5f]);' % [@count, frame, abs_float_x, @height - abs_float_y])
|
38
|
+
end
|
39
|
+
|
40
|
+
def end_tracker_segment
|
41
|
+
@count += 1
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/lib/tracksperanto.rb
CHANGED
@@ -0,0 +1,62 @@
|
|
1
|
+
function convertFrameToSeconds(layerWithFootage, frameValue)
|
2
|
+
{
|
3
|
+
var comp = layerWithFootage.containingComp;
|
4
|
+
var rate = 1.0 / comp.frameDuration;
|
5
|
+
// Frames in AE are 0-based by default
|
6
|
+
return (frameValue) / rate;
|
7
|
+
}
|
8
|
+
|
9
|
+
|
10
|
+
var layer0 = app.project.activeItem.layers.addNull();
|
11
|
+
layer0.name = "Parabolic_1_from_top_left";
|
12
|
+
|
13
|
+
var pos = layer0.property("Transform").property("Position");
|
14
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 0), [0.00000,0.00000]);
|
15
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 1), [96.00000,205.20000]);
|
16
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 2), [192.00000,388.80000]);
|
17
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 3), [288.00000,550.80000]);
|
18
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 4), [384.00000,691.20000]);
|
19
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 5), [480.00000,810.00000]);
|
20
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 6), [576.00000,907.20000]);
|
21
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 7), [672.00000,982.80000]);
|
22
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 8), [768.00000,1036.80000]);
|
23
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 9), [864.00000,1069.20000]);
|
24
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 12), [1152.00000,1036.80000]);
|
25
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 13), [1248.00000,982.80000]);
|
26
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 14), [1344.00000,907.20000]);
|
27
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 15), [1440.00000,810.00000]);
|
28
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 16), [1536.00000,691.20000]);
|
29
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 17), [1632.00000,550.80000]);
|
30
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 18), [1728.00000,388.80000]);
|
31
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 19), [1824.00000,205.20000]);
|
32
|
+
pos.setValueAtTime(convertFrameToSeconds(layer0, 20), [1920.00000,0.00000]);
|
33
|
+
|
34
|
+
var layer1 = app.project.activeItem.layers.addNull();
|
35
|
+
layer1.name = "Parabolic_2_from_bottom_right";
|
36
|
+
|
37
|
+
var pos = layer1.property("Transform").property("Position");
|
38
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 0), [1920.00000,1080.00000]);
|
39
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 1), [1824.00000,874.80000]);
|
40
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 2), [1728.00000,691.20000]);
|
41
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 3), [1632.00000,529.20000]);
|
42
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 4), [1536.00000,388.80000]);
|
43
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 5), [1440.00000,270.00000]);
|
44
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 6), [1344.00000,172.80000]);
|
45
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 7), [1248.00000,97.20000]);
|
46
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 8), [1152.00000,43.20000]);
|
47
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 9), [1056.00000,10.80000]);
|
48
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 12), [768.00000,43.20000]);
|
49
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 13), [672.00000,97.20000]);
|
50
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 14), [576.00000,172.80000]);
|
51
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 15), [480.00000,270.00000]);
|
52
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 16), [384.00000,388.80000]);
|
53
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 17), [288.00000,529.20000]);
|
54
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 18), [192.00000,691.20000]);
|
55
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 19), [96.00000,874.80000]);
|
56
|
+
pos.setValueAtTime(convertFrameToSeconds(layer1, 20), [0.00000,1080.00000]);
|
57
|
+
|
58
|
+
var layer2 = app.project.activeItem.layers.addNull();
|
59
|
+
layer2.name = "SingleFrame";
|
60
|
+
|
61
|
+
var pos = layer2.property("Transform").property("Position");
|
62
|
+
pos.setValueAtTime(convertFrameToSeconds(layer2, 0), [970.00000,530.00000]);
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require File.expand_path(File.dirname(__FILE__)) + '/../helper'
|
3
|
+
|
4
|
+
class AEExportTest < Test::Unit::TestCase
|
5
|
+
include ParabolicTracks
|
6
|
+
|
7
|
+
P_LOCATORS = File.dirname(__FILE__) + "/samples/ref_AfterEffects.jsx"
|
8
|
+
|
9
|
+
def test_export_output_written
|
10
|
+
ensure_same_output Tracksperanto::Export::AE, P_LOCATORS
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_exporter_meta
|
14
|
+
assert_equal "createNulls.jsx", Tracksperanto::Export::AE.desc_and_extension
|
15
|
+
assert_equal "AfterEffects .jsx script generating null layers", Tracksperanto::Export::AE.human_name
|
16
|
+
end
|
17
|
+
end
|
data/test/helper.rb
CHANGED
@@ -29,7 +29,11 @@ end
|
|
29
29
|
# export_parabolics_with(my_exporter)
|
30
30
|
#
|
31
31
|
# The tracker residual will degrade linarly and wll be "good" at the first image, "medium" at the extreme
|
32
|
-
# and "bad" at end
|
32
|
+
# and "bad" at end.
|
33
|
+
#
|
34
|
+
# The test tracks are precomputed to prevent failing tests due to float rounding biases on different platforms.
|
35
|
+
# You can see the computation involved in generating these tracks in
|
36
|
+
# https://github.com/guerilla-di/tracksperanto/commit/371214b47b2ead857c4af17eee1f8d19c62d1dd6#diff-5
|
33
37
|
module ParabolicTracks
|
34
38
|
|
35
39
|
FIRST_TRACK = Tracksperanto::Tracker.new(:name => "Parabolic_1_from_top_left") do |t|
|
data/test/test_cli.rb
CHANGED
@@ -40,7 +40,7 @@ class CliTest < Test::Unit::TestCase
|
|
40
40
|
flm.stabilizer flm_3de_v3.txt flm_3de_v4.txt flm_boujou_text.txt flm_flame.stabilizer
|
41
41
|
flm_matchmover.rz2 flm_mayalive.txt flm_nuke.nk flm_pftrack_2011_pfmatchit.txt flm_pftrack_v4.2dt
|
42
42
|
flm_pftrack_v5.2dt flm_shake_trackers.txt flm_syntheyes_2dt.txt flm_flame_cornerpin.stabilizer
|
43
|
-
flm_tracksperanto_ruby.rb flm_mayaLocators.mel
|
43
|
+
flm_tracksperanto_ruby.rb flm_mayaLocators.mel flm_createNulls.jsx
|
44
44
|
)
|
45
45
|
|
46
46
|
assert_same_set fs, Dir.entries(TEMP_DIR)
|
data/tracksperanto.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "tracksperanto"
|
8
|
-
s.version = "2.9.
|
8
|
+
s.version = "2.9.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Julik Tarkhanov"]
|
12
|
-
s.date = "2012-01-
|
12
|
+
s.date = "2012-01-28"
|
13
13
|
s.description = "Converts 2D track exports between different apps like Flame, MatchMover, PFTrack..."
|
14
14
|
s.email = "me@julik.nl"
|
15
15
|
s.executables = ["tracksperanto"]
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"bin/tracksperanto",
|
28
28
|
"lib/export/base.rb",
|
29
29
|
"lib/export/boujou.rb",
|
30
|
+
"lib/export/cosa.rb",
|
30
31
|
"lib/export/equalizer3.rb",
|
31
32
|
"lib/export/equalizer4.rb",
|
32
33
|
"lib/export/flame_stabilizer.rb",
|
@@ -89,6 +90,7 @@ Gem::Specification.new do |s|
|
|
89
90
|
"lib/tracksperanto/uv_coordinates.rb",
|
90
91
|
"lib/tracksperanto/zip_tuples.rb",
|
91
92
|
"test/export/README_EXPORT_TESTS.txt",
|
93
|
+
"test/export/samples/ref_AfterEffects.jsx",
|
92
94
|
"test/export/samples/ref_FlameProperlyReorderedCornerpin.stabilizer",
|
93
95
|
"test/export/samples/ref_FlameSimpleReorderedCornerpin.stabilizer",
|
94
96
|
"test/export/samples/ref_MayaLocators.mel",
|
@@ -107,6 +109,7 @@ Gem::Specification.new do |s|
|
|
107
109
|
"test/export/samples/ref_flame.stabilizer",
|
108
110
|
"test/export/samples/ref_flameCornerpin.stabilizer",
|
109
111
|
"test/export/samples/ref_matchmover.rz2",
|
112
|
+
"test/export/test_ae_export.rb",
|
110
113
|
"test/export/test_boujou_export.rb",
|
111
114
|
"test/export/test_equalizer3_export.rb",
|
112
115
|
"test/export/test_equalizer_export.rb",
|
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: 2.9.
|
4
|
+
version: 2.9.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: obuf
|
16
|
-
requirement: &
|
16
|
+
requirement: &4002190 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.0.4
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *4002190
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: progressive_io
|
27
|
-
requirement: &
|
27
|
+
requirement: &4001450 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *4001450
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: flame_channel_parser
|
38
|
-
requirement: &
|
38
|
+
requirement: &4000830 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '4.0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *4000830
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: progressbar
|
49
|
-
requirement: &
|
49
|
+
requirement: &4000140 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0.9'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *4000140
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: update_hints
|
60
|
-
requirement: &
|
60
|
+
requirement: &3999670 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '1.0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *3999670
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: jeweler
|
71
|
-
requirement: &
|
71
|
+
requirement: &3998710 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *3998710
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rake
|
82
|
-
requirement: &
|
82
|
+
requirement: &3998020 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *3998020
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: flexmock
|
93
|
-
requirement: &
|
93
|
+
requirement: &3996680 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0.8'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *3996680
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: cli_test
|
104
|
-
requirement: &
|
104
|
+
requirement: &3995630 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: '1.0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *3995630
|
113
113
|
description: Converts 2D track exports between different apps like Flame, MatchMover,
|
114
114
|
PFTrack...
|
115
115
|
email: me@julik.nl
|
@@ -129,6 +129,7 @@ files:
|
|
129
129
|
- bin/tracksperanto
|
130
130
|
- lib/export/base.rb
|
131
131
|
- lib/export/boujou.rb
|
132
|
+
- lib/export/cosa.rb
|
132
133
|
- lib/export/equalizer3.rb
|
133
134
|
- lib/export/equalizer4.rb
|
134
135
|
- lib/export/flame_stabilizer.rb
|
@@ -191,6 +192,7 @@ files:
|
|
191
192
|
- lib/tracksperanto/uv_coordinates.rb
|
192
193
|
- lib/tracksperanto/zip_tuples.rb
|
193
194
|
- test/export/README_EXPORT_TESTS.txt
|
195
|
+
- test/export/samples/ref_AfterEffects.jsx
|
194
196
|
- test/export/samples/ref_FlameProperlyReorderedCornerpin.stabilizer
|
195
197
|
- test/export/samples/ref_FlameSimpleReorderedCornerpin.stabilizer
|
196
198
|
- test/export/samples/ref_MayaLocators.mel
|
@@ -209,6 +211,7 @@ files:
|
|
209
211
|
- test/export/samples/ref_flame.stabilizer
|
210
212
|
- test/export/samples/ref_flameCornerpin.stabilizer
|
211
213
|
- test/export/samples/ref_matchmover.rz2
|
214
|
+
- test/export/test_ae_export.rb
|
212
215
|
- test/export/test_boujou_export.rb
|
213
216
|
- test/export/test_equalizer3_export.rb
|
214
217
|
- test/export/test_equalizer_export.rb
|