tracksperanto 2.11.2 → 2.11.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 CHANGED
@@ -1,3 +1,8 @@
1
+ === 2.11.3
2
+
3
+ * Hint that we only support specific nodes in Nuke
4
+ * Hint the user that a comp must be focused in AfterEffects when the import script is run without focusing on a comp first
5
+
1
6
  === 2.11.1
2
7
 
3
8
  * Fixes a bug with importer snag display
data/lib/export/cosa.rb CHANGED
@@ -4,12 +4,18 @@ class Tracksperanto::Export::AE < Tracksperanto::Export::Base
4
4
 
5
5
  PREAMBLE = '// Run this script from the Script Editor
6
6
  function convertFrameToSeconds(layerWithFootage, frameValue)
7
- {
8
- var comp = layerWithFootage.containingComp;
9
- var rate = 1.0 / comp.frameDuration;
10
- // Frames in AE are 0-based by default
11
- return (frameValue) / rate;
12
- }'
7
+ {
8
+ var comp = layerWithFootage.containingComp;
9
+ var rate = 1.0 / comp.frameDuration;
10
+ // Frames in AE are 0-based by default
11
+ return (frameValue) / rate;
12
+ }
13
+
14
+ var activeComp = app.project.activeItem;
15
+ if(!activeComp) {
16
+ // Totally fail
17
+ alert("You need to be focused on a comp for the tracker creation to work");
18
+ } else {'
13
19
 
14
20
  def self.desc_and_extension
15
21
  "createNulls.jsx"
@@ -28,7 +34,7 @@ function convertFrameToSeconds(layerWithFootage, frameValue)
28
34
 
29
35
  def start_tracker_segment(tracker_name)
30
36
  @io.puts("")
31
- @io.puts('var layer%d = app.project.activeItem.layers.addNull();' % @count)
37
+ @io.puts('var layer%d = activeComp.layers.addNull();' % @count)
32
38
  @io.puts( 'layer%d.name = %s;' % [@count, tracker_name.inspect])
33
39
  @io.puts("")
34
40
  @io.puts('var pos = layer%d.property("Transform").property("Position");' % @count)
@@ -42,4 +48,8 @@ function convertFrameToSeconds(layerWithFootage, frameValue)
42
48
  @count += 1
43
49
  end
44
50
 
51
+ def end_export
52
+ @io.puts('}') # Finishes the export clause
53
+ end
54
+
45
55
  end
@@ -25,11 +25,13 @@ class Tracksperanto::Export::SynthEyes < Tracksperanto::Export::Base
25
25
  convert_to_uv(abs_float_y, @height) * -1,
26
26
  get_outcome_code(frame)
27
27
  ]
28
- @io.puts("%s %d %.6f %.6f %d" % values)
28
+ @io.puts(LINE_TEMPLATE % values)
29
29
  end
30
30
 
31
31
  private
32
- STATUS_KF = 30 # When tracker starts or reenables
32
+
33
+ LINE_TEMPLATE = "%s %d %.6f %.6f %d"
34
+
33
35
  STATUS_STD = 7 # For a standard frame (not a keyframe)
34
36
  STATUS_REENABLE = 15 # When the tracker goes back into view
35
37
 
@@ -12,6 +12,10 @@ class Tracksperanto::Import::NukeScript < Tracksperanto::Import::Base
12
12
  ".nk"
13
13
  end
14
14
 
15
+ def self.known_snags
16
+ 'The only supported nodes that we can extract tracks from are Reconcile3D, PlanarTracker and Tracker'
17
+ end
18
+
15
19
  def each
16
20
  io = Tracksperanto::ExtIO.new(@io)
17
21
  while line = io.gets_and_strip
data/lib/tracksperanto.rb CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  module Tracksperanto
5
5
  PATH = File.expand_path(File.dirname(__FILE__))
6
- VERSION = '2.11.2'
6
+ VERSION = '2.11.3'
7
7
 
8
8
  module Import; end
9
9
  module Export; end
@@ -1,14 +1,20 @@
1
1
  // Run this script from the Script Editor
2
2
  function convertFrameToSeconds(layerWithFootage, frameValue)
3
- {
4
- var comp = layerWithFootage.containingComp;
5
- var rate = 1.0 / comp.frameDuration;
6
- // Frames in AE are 0-based by default
7
- return (frameValue) / rate;
8
- }
3
+ {
4
+ var comp = layerWithFootage.containingComp;
5
+ var rate = 1.0 / comp.frameDuration;
6
+ // Frames in AE are 0-based by default
7
+ return (frameValue) / rate;
8
+ }
9
9
 
10
+ var activeComp = app.project.activeItem;
11
+ if(!activeComp) {
12
+ // Totally fail
13
+ alert("You need to be focused on a comp for the tracker creation to work");
14
+ } else {
10
15
 
11
- var layer0 = app.project.activeItem.layers.addNull();
16
+
17
+ var layer0 = activeComp.layers.addNull();
12
18
  layer0.name = "Parabolic_1_from_top_left";
13
19
 
14
20
  var pos = layer0.property("Transform").property("Position");
@@ -32,7 +38,7 @@ pos.setValueAtTime(convertFrameToSeconds(layer0, 18), [1728.00000,388.80000]);
32
38
  pos.setValueAtTime(convertFrameToSeconds(layer0, 19), [1824.00000,205.20000]);
33
39
  pos.setValueAtTime(convertFrameToSeconds(layer0, 20), [1920.00000,0.00000]);
34
40
 
35
- var layer1 = app.project.activeItem.layers.addNull();
41
+ var layer1 = activeComp.layers.addNull();
36
42
  layer1.name = "Parabolic_2_from_bottom_right";
37
43
 
38
44
  var pos = layer1.property("Transform").property("Position");
@@ -56,8 +62,9 @@ pos.setValueAtTime(convertFrameToSeconds(layer1, 18), [192.00000,691.20000]);
56
62
  pos.setValueAtTime(convertFrameToSeconds(layer1, 19), [96.00000,874.80000]);
57
63
  pos.setValueAtTime(convertFrameToSeconds(layer1, 20), [0.00000,1080.00000]);
58
64
 
59
- var layer2 = app.project.activeItem.layers.addNull();
65
+ var layer2 = activeComp.layers.addNull();
60
66
  layer2.name = "SingleFrame_InTheMiddle";
61
67
 
62
68
  var pos = layer2.property("Transform").property("Position");
63
69
  pos.setValueAtTime(convertFrameToSeconds(layer2, 0), [970.00000,530.00000]);
70
+ }
data/test/helper.rb CHANGED
@@ -98,8 +98,17 @@ module ParabolicTracks
98
98
  [ref_buffer, actual_buffer].each{|io| io.rewind }
99
99
 
100
100
  # There are subtle differences in how IO is handled on dfferent platforms (Darwin)
101
- ref_buffer, actual_buffer = ref_buffer.read, actual_buffer.read
102
- assert_equal ref_buffer, actual_buffer
101
+ lineno = 0
102
+ begin
103
+ loop do
104
+ return if ref_buffer.eof? && actual_buffer.eof?
105
+ lineno += 1
106
+ ref_line, actual_line = ref_buffer.readline, actual_buffer.readline
107
+ assert_equal ref_line, actual_line, "Mismatch on line #{lineno}:"
108
+ end
109
+ rescue EOFError
110
+ flunk "One of the buffers was too short at #{lineno}"
111
+ end
103
112
  end
104
113
 
105
114
  def ensure_same_output(exporter_klass, reference_path, message = "The line should be identical")
@@ -44,6 +44,15 @@ class TestPipeline < Test::Unit::TestCase
44
44
  assert_equal 9, pipeline.converted_keyframes, "Should report conversion of 9 keyframes"
45
45
  end
46
46
 
47
+ def test_run_with_error_picks_up_known_snags_from_importer
48
+ create_stabilizer_file
49
+ pipeline = Tracksperanto::Pipeline::Base.new
50
+ flexmock(Tracksperanto::Import::ShakeScript).should_receive(:known_snags).times(1)
51
+ assert_raise(Tracksperanto::Pipeline::NoTrackersRecoveredError) do
52
+ pipeline.run(@stabilizer, :importer => "ShakeScript", :width => 2910, :height => 1080)
53
+ end
54
+ end
55
+
47
56
  def test_run_with_autodetected_importer_and_size_with_progress_block
48
57
  create_stabilizer_file
49
58
  processing_log = ""
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "tracksperanto"
8
- s.version = "2.11.2"
8
+ s.version = "2.11.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-07-06"
12
+ s.date = "2012-09-12"
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"]
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.11.2
4
+ version: 2.11.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-06 00:00:00.000000000 Z
12
+ date: 2012-09-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: obuf
@@ -363,7 +363,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
363
363
  version: '0'
364
364
  segments:
365
365
  - 0
366
- hash: -1585279817565401157
366
+ hash: -3129268817076589173
367
367
  required_rubygems_version: !ruby/object:Gem::Requirement
368
368
  none: false
369
369
  requirements: