tracksperanto 2.9.2 → 2.9.3

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,5 +1,9 @@
1
1
  === 2.9.2
2
2
 
3
+ * Add export for AE null layers as a .jsx script
4
+
5
+ === 2.9.2
6
+
3
7
  * In the Maya locator export, do not advance the timebar when creating trackers. Refreshing all these viewports is SLOW.
4
8
 
5
9
  === 2.9.1
@@ -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
@@ -8,7 +8,7 @@ require "progressive_io"
8
8
 
9
9
  module Tracksperanto
10
10
  PATH = File.expand_path(File.dirname(__FILE__))
11
- VERSION = '2.9.2'
11
+ VERSION = '2.9.3'
12
12
 
13
13
  module Import; end
14
14
  module Export; end
@@ -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)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "tracksperanto"
8
- s.version = "2.9.2"
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-27"
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.2
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-27 00:00:00.000000000 Z
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: &4170520 !ruby/object:Gem::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: *4170520
24
+ version_requirements: *4002190
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: progressive_io
27
- requirement: &4170210 !ruby/object:Gem::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: *4170210
35
+ version_requirements: *4001450
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: flame_channel_parser
38
- requirement: &4169840 !ruby/object:Gem::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: *4169840
46
+ version_requirements: *4000830
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: progressbar
49
- requirement: &4169350 !ruby/object:Gem::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: *4169350
57
+ version_requirements: *4000140
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: update_hints
60
- requirement: &4168970 !ruby/object:Gem::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: *4168970
68
+ version_requirements: *3999670
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jeweler
71
- requirement: &4168410 !ruby/object:Gem::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: *4168410
79
+ version_requirements: *3998710
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rake
82
- requirement: &4168060 !ruby/object:Gem::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: *4168060
90
+ version_requirements: *3998020
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: flexmock
93
- requirement: &4167650 !ruby/object:Gem::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: *4167650
101
+ version_requirements: *3996680
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: cli_test
104
- requirement: &4167310 !ruby/object:Gem::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: *4167310
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