tracksperanto 2.9.9 → 2.10.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/Gemfile +1 -0
- data/History.txt +4 -0
- data/README.rdoc +4 -4
- data/bin/tracksperanto +7 -4
- data/lib/import/nuke_script.rb +29 -1
- data/lib/middleware/lens_disto.rb +37 -44
- data/lib/pipeline/base.rb +1 -1
- data/lib/tracksperanto.rb +1 -1
- data/test/helper.rb +1 -0
- data/test/import/test_nuke_import.rb +15 -0
- data/test/middleware/test_lens_middleware.rb +6 -3
- data/tracksperanto.gemspec +5 -2
- metadata +32 -21
data/Gemfile
CHANGED
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -55,7 +55,7 @@ converted files already exist <b>they will be overwritten without warning</b>.
|
|
55
55
|
== Format support
|
56
56
|
|
57
57
|
Import and export support:
|
58
|
-
* Nuke v5 script (Tracker3 nodes, also known as Tracker in the UI - this is the node that you track with)
|
58
|
+
* Nuke v5 script (Tracker3 nodes, also known as Tracker in the UI - this is the node that you track with, and Reconcile3D)
|
59
59
|
* Shake tracker node export (textfile with many tracks per file)
|
60
60
|
* PFTrack 2dt (version 4 and 5) anf PFMatchit/PFTrack 2011 point track exports
|
61
61
|
* Syntheyes 2D tracking data exports
|
@@ -74,10 +74,10 @@ Export only:
|
|
74
74
|
* Ruby (will make calls to Tracksperanto to create trackers/keyframes) - useful if you want to play with trackers as data
|
75
75
|
* Maya locators (animated locators on an image plane)
|
76
76
|
|
77
|
-
==
|
77
|
+
== Editing your tracks while converting
|
78
78
|
|
79
|
-
Tracksperanto
|
80
|
-
|
79
|
+
Tracksperanto has a number of features to scale, move, slip, distort and rename trackers.
|
80
|
+
Consult the --help option to see what is available.
|
81
81
|
|
82
82
|
== Development
|
83
83
|
|
data/bin/tracksperanto
CHANGED
@@ -68,11 +68,14 @@ op.on("--code PATH_TO_SCRIPT", String, "Load custom Ruby code into tracksperanto
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
+
def f(module_list)
|
72
|
+
"\n" + module_list.map{|e| "\t\t\t\t\t%s\n" % e }.join
|
73
|
+
end
|
71
74
|
|
72
|
-
op.on(" -f", "--from TRANSLATOR", String, "Use the specific import translator
|
75
|
+
op.on(" -f", "--from TRANSLATOR", String, "Use the specific import translator, must be one of: #{f(readers)}") { |f| options[:importer] = f }
|
73
76
|
op.on(" -w", "--width WIDTH_IN_PIXELS", Integer, "Absolute input comp width in pixels (will try to autodetect)") { |w| options[:width] = w }
|
74
77
|
op.on(" -h", "--height HEIGHT_IN_PIXELS", Integer, "Absolute input comp height in pixels (will try to autodetect)") {|w| options[:height] = w }
|
75
|
-
op.on(" -o", "--only EXPORTER_NAME", String, "Only export the selected format, format must be one of #{writers
|
78
|
+
op.on(" -o", "--only EXPORTER_NAME", String, "Only export the selected format, format must be one of: #{f(writers)}") { |f| writer_class_name = f }
|
76
79
|
|
77
80
|
op.on(" -xs", "--xscale X_SCALING_FACTOR", Float, mwd("Scaler"), &mw("Scaler", :x_factor))
|
78
81
|
|
@@ -81,12 +84,12 @@ op.on(" -pad", "--pad PAD_FRACTION_VALUES_COMMA_SEPARATED", String, mwd("Pad"))
|
|
81
84
|
$middlewares.push(["Pad", {"left_pad" => left, "right_pad"=> right, "top_pad" => top, "bottom_pad" => bottom}])
|
82
85
|
end
|
83
86
|
|
84
|
-
op.on(" -u", "--undistort K_AND_KCUBE_COMMA_SEPARATED", String,
|
87
|
+
op.on(" -u", "--undistort K_AND_KCUBE_COMMA_SEPARATED", String, "Remove lens distortion using the Syntheyes algorithm") do | coefficients |
|
85
88
|
k, kcube = coefficients.split(",").map{|e| e.to_f }
|
86
89
|
$middlewares.push(["LensDisto", {"k" => k, "kcube"=> kcube, "remove" => true}])
|
87
90
|
end
|
88
91
|
|
89
|
-
op.on(" -d", "--distort K_AND_KCUBE_COMMA_SEPARATED", String,
|
92
|
+
op.on(" -d", "--distort K_AND_KCUBE_COMMA_SEPARATED", String, "Add lens distortion using the Syntheyes algorithm") do | coefficients |
|
90
93
|
k, kcube = coefficients.split(",").map{|e| e.to_f }
|
91
94
|
$middlewares.push(["LensDisto", {"k" => k, "kcube"=> kcube, "remove" => false}])
|
92
95
|
end
|
data/lib/import/nuke_script.rb
CHANGED
@@ -19,6 +19,8 @@ class Tracksperanto::Import::NukeScript < Tracksperanto::Import::Base
|
|
19
19
|
scan_tracker_node(io).each(&Proc.new)
|
20
20
|
elsif line =~ RECONCILE_PATTERN
|
21
21
|
scan_reconcile_node(io).each(&Proc.new)
|
22
|
+
elsif line =~ PLANAR_PATTERN
|
23
|
+
scan_planar_tracker_node(io).each(&Proc.new)
|
22
24
|
end
|
23
25
|
end
|
24
26
|
end
|
@@ -27,10 +29,11 @@ class Tracksperanto::Import::NukeScript < Tracksperanto::Import::Base
|
|
27
29
|
|
28
30
|
TRACKER_3_PATTERN = /^Tracker3 \{/
|
29
31
|
RECONCILE_PATTERN = /^Reconcile3D \{/
|
32
|
+
PLANAR_PATTERN = /^PlanarTracker1_0 \{/
|
30
33
|
OUTPUT_PATTERN = /^output \{/
|
31
34
|
TRACK_PATTERN = /^track(\d) \{/
|
32
35
|
NODENAME = /^name ([^\n]+)/
|
33
|
-
|
36
|
+
PLANAR_CORNERS = %w( outputBottomLeft outputBottomRight outputTopLeft outputTopRight)
|
34
37
|
|
35
38
|
# Scans a Reconcile3D node and returs it's output
|
36
39
|
def scan_reconcile_node(io)
|
@@ -46,6 +49,31 @@ class Tracksperanto::Import::NukeScript < Tracksperanto::Import::Base
|
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
52
|
+
# Scans a PlanarTracker node and recovers corner pin
|
53
|
+
def scan_planar_tracker_node(io)
|
54
|
+
trackers, node_name = [], nil
|
55
|
+
while line = io.gets_and_strip
|
56
|
+
PLANAR_CORNERS.each do | corner_name |
|
57
|
+
if line =~ /#{corner_name}/
|
58
|
+
t = Tracksperanto::Tracker.new
|
59
|
+
t = extract_tracker(line)
|
60
|
+
t.name = corner_name
|
61
|
+
trackers.push(t.dup)
|
62
|
+
elsif line =~ NODENAME
|
63
|
+
node_name = $1
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
if node_name && trackers.length == 4
|
68
|
+
trackers.each{|t| t.name = "%s_%s" % [node_name, t.name] }
|
69
|
+
return trackers
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# Fail
|
74
|
+
return []
|
75
|
+
end
|
76
|
+
|
49
77
|
# Scans a tracker node and return all tracks within that node (no more than 4)
|
50
78
|
def scan_tracker_node(io)
|
51
79
|
tracks_in_tracker = []
|
@@ -1,19 +1,7 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
class Tracksperanto::Middleware::LensDisto < Tracksperanto::Middleware::Base
|
3
3
|
include Tracksperanto::UVCoordinates
|
4
|
-
|
5
|
-
class Vector2 < Struct.new(:x, :y)
|
6
|
-
end
|
7
|
-
|
8
|
-
class RF < Struct.new(:r, :f)
|
9
|
-
def inspect
|
10
|
-
'(%0.3f %0.3f)' % [r, f]
|
11
|
-
end
|
12
|
-
|
13
|
-
def m
|
14
|
-
r * f
|
15
|
-
end
|
16
|
-
end
|
4
|
+
|
17
5
|
|
18
6
|
parameter :k, :cast => :float, :desc => "Quartic distortion coefficient", :default => 0
|
19
7
|
parameter :kcube, :cast => :float, :desc => "Cubic distortion coefficient", :default => 0
|
@@ -29,6 +17,32 @@ class Tracksperanto::Middleware::LensDisto < Tracksperanto::Middleware::Base
|
|
29
17
|
@width, @height = w, h
|
30
18
|
@aspect = @width.to_f / @height
|
31
19
|
|
20
|
+
generate_lut
|
21
|
+
super
|
22
|
+
end
|
23
|
+
|
24
|
+
def export_point(frame, float_x, float_y, float_residual)
|
25
|
+
x, y = remove ? undisto(float_x, float_y) : disto(float_x, float_y)
|
26
|
+
super(frame, x, y, float_residual)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
class Vector2 < Struct.new(:x, :y)
|
32
|
+
end
|
33
|
+
|
34
|
+
class RF < Struct.new(:r, :f)
|
35
|
+
def inspect
|
36
|
+
'(%0.3f %0.3f)' % [r, f]
|
37
|
+
end
|
38
|
+
|
39
|
+
def m
|
40
|
+
r * f
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# We apply disto using a lookup table of y = f(r)
|
45
|
+
def generate_lut
|
32
46
|
# Generate the lookup table
|
33
47
|
@lut = [RF.new(0.0, 1.0)]
|
34
48
|
max_r = @aspect + 1
|
@@ -37,20 +51,10 @@ class Tracksperanto::Middleware::LensDisto < Tracksperanto::Middleware::Base
|
|
37
51
|
r = 0
|
38
52
|
STEPS.times do | mult |
|
39
53
|
r += increment
|
40
|
-
@lut.push(RF.new(r,
|
54
|
+
@lut.push(RF.new(r, distort_radius(r)))
|
41
55
|
end
|
42
|
-
|
43
|
-
@lut.inspect
|
44
|
-
super
|
45
56
|
end
|
46
57
|
|
47
|
-
def export_point(frame, float_x, float_y, float_residual)
|
48
|
-
x, y = remove ? undisto(float_x, float_y) : disto(float_x, float_y)
|
49
|
-
super(frame, x, y, float_residual)
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
58
|
def with_uv(x, y)
|
55
59
|
vec = Vector2.new(convert_to_uv(x, @width), convert_to_uv(y, @height))
|
56
60
|
yield(vec)
|
@@ -58,40 +62,29 @@ class Tracksperanto::Middleware::LensDisto < Tracksperanto::Middleware::Base
|
|
58
62
|
end
|
59
63
|
|
60
64
|
# Radius is equal to aspect at the rightmost extremity
|
61
|
-
def
|
62
|
-
|
63
|
-
# Skipping the square root speeds things up if we don't need it
|
64
|
-
f = if kcube.abs > 0.00001
|
65
|
-
1 + (r2 * (k + kcube * Math.sqrt(r2)));
|
66
|
-
else
|
67
|
-
1 + (r2 * k);
|
68
|
-
end
|
65
|
+
def distort_radius(r)
|
66
|
+
1 + (r*r*(k + kcube * r))
|
69
67
|
end
|
70
68
|
|
71
69
|
def disto(x, y)
|
72
70
|
with_uv(x, y) do | pt |
|
73
|
-
# Get the radius of the point
|
74
|
-
x = pt.x * @aspect
|
75
|
-
r = Math.sqrt(x.abs**2 + pt.y.abs**2)
|
76
|
-
|
77
71
|
# Find the good tuples to interpolate on
|
78
|
-
f = disto_interpolated(
|
79
|
-
|
72
|
+
f = disto_interpolated(get_radius(pt))
|
80
73
|
pt.x = pt.x * f
|
81
74
|
pt.y = pt.y * f
|
82
75
|
end
|
83
76
|
end
|
84
77
|
|
78
|
+
def get_radius(pt)
|
79
|
+
# Get the radius of the point
|
80
|
+
x = pt.x * @aspect
|
81
|
+
r = Math.sqrt(x.abs**2 + pt.y.abs**2)
|
82
|
+
end
|
85
83
|
|
86
84
|
def undisto(x, y)
|
87
85
|
with_uv(x, y) do | pt |
|
88
|
-
# Get the radius of the point
|
89
|
-
x = pt.x * @aspect
|
90
|
-
r = Math.sqrt(x.abs**2 + pt.y.abs**2)
|
91
|
-
|
92
86
|
# Find the good tuples to interpolate on
|
93
|
-
f = undisto_interpolated(
|
94
|
-
|
87
|
+
f = undisto_interpolated(get_radius(pt))
|
95
88
|
pt.x = pt.x / f
|
96
89
|
pt.y = pt.y / f
|
97
90
|
end
|
data/lib/pipeline/base.rb
CHANGED
@@ -26,7 +26,7 @@ module Tracksperanto::Pipeline
|
|
26
26
|
# applies the middlewares. Here's how a calling sequence for a pipeline looks like:
|
27
27
|
#
|
28
28
|
# pipe = Tracksperanto::Pipeline::Base.new
|
29
|
-
# pipe.middleware_tuples = ["
|
29
|
+
# pipe.middleware_tuples = ["Shift", {:x => 10}]
|
30
30
|
# pipe.progress_block = lambda{|percent, msg| puts("#{msg}..#{percent.to_i}%") }
|
31
31
|
# pipe.run("/tmp/shakescript.shk", :width => 720, :height => 576)
|
32
32
|
#
|
data/lib/tracksperanto.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -4,6 +4,7 @@ require File.dirname(__FILE__) + '/../lib/tracksperanto' unless defined?(Tracksp
|
|
4
4
|
require 'test/unit'
|
5
5
|
require 'flexmock'
|
6
6
|
require 'flexmock/test_unit'
|
7
|
+
require 'approximately'
|
7
8
|
require 'fileutils'
|
8
9
|
|
9
10
|
unless File.exist?(File.dirname(__FILE__) + "/import/samples")
|
@@ -34,6 +34,20 @@ class NukeImportTest < Test::Unit::TestCase
|
|
34
34
|
assert_equal 128, trackers[0].length
|
35
35
|
end
|
36
36
|
|
37
|
+
def test_parsing_planar_tracker
|
38
|
+
fixture = File.open(File.dirname(__FILE__) + '/samples/nuke/planar.nk')
|
39
|
+
|
40
|
+
parser = Tracksperanto::Import::NukeScript.new(:io => fixture)
|
41
|
+
parser.width = 4096
|
42
|
+
parser.height = 2304
|
43
|
+
|
44
|
+
trackers = parser.to_a
|
45
|
+
assert_equal 4, trackers.length
|
46
|
+
|
47
|
+
ref_names = %w( PlanarTracker2_outputBottomLeft PlanarTracker2_outputBottomRight
|
48
|
+
PlanarTracker2_outputTopRight PlanarTracker2_outputTopLeft )
|
49
|
+
assert_equal ref_names, trackers.map{|e| e.name }
|
50
|
+
end
|
37
51
|
|
38
52
|
def test_parsing_from_nuke
|
39
53
|
fixture = File.open(File.dirname(__FILE__) + '/samples/nuke/one_tracker_with_break.nk')
|
@@ -121,6 +135,7 @@ x754 912.0731812 x755 913.7190552 916.0959473 918.1025391 920.0751953 922.189880
|
|
121
135
|
assert_equal 754, result[7][0]
|
122
136
|
end
|
123
137
|
|
138
|
+
|
124
139
|
def test_zip_channels
|
125
140
|
tuples_x = [[1, 125], [3, 234], [5, 456], [9,876]]
|
126
141
|
tuples_y = [[2, 437], [3, 123], [6, 432], [9, 430]]
|
@@ -3,6 +3,8 @@ require File.expand_path(File.dirname(__FILE__)) + '/../helper'
|
|
3
3
|
|
4
4
|
class LensMiddlewareTest < Test::Unit::TestCase
|
5
5
|
|
6
|
+
include Approximately
|
7
|
+
|
6
8
|
def test_action_description
|
7
9
|
assert_equal "Apply or remove lens distortion with the Syntheyes algorithm", Tracksperanto::Middleware::LensDisto.action_description
|
8
10
|
end
|
@@ -27,7 +29,8 @@ class LensMiddlewareTest < Test::Unit::TestCase
|
|
27
29
|
receiver = flexmock
|
28
30
|
receiver.should_receive(:start_export).once.with(1920, 1080)
|
29
31
|
receiver.should_receive(:start_tracker_segment).once.with("Tracker")
|
30
|
-
receiver.should_receive(:export_point).once.with(1, 66.
|
32
|
+
receiver.should_receive(:export_point).once.with(1, approx(66.03), approx(43.978), approx(0))
|
33
|
+
|
31
34
|
receiver.should_receive(:end_tracker_segment).once
|
32
35
|
receiver.should_receive(:end_export).once
|
33
36
|
|
@@ -43,7 +46,7 @@ class LensMiddlewareTest < Test::Unit::TestCase
|
|
43
46
|
receiver = flexmock
|
44
47
|
receiver.should_receive(:start_export).once.with(1920, 1080)
|
45
48
|
receiver.should_receive(:start_tracker_segment).once.with("Tracker")
|
46
|
-
receiver.should_receive(:export_point).once.with(1, 11.999914830236555, 13.99995274335909, 0)
|
49
|
+
receiver.should_receive(:export_point).once.with(1, approx(11.999914830236555), approx(13.99995274335909), 0)
|
47
50
|
receiver.should_receive(:end_tracker_segment).once
|
48
51
|
receiver.should_receive(:end_export).once
|
49
52
|
|
@@ -59,7 +62,7 @@ class LensMiddlewareTest < Test::Unit::TestCase
|
|
59
62
|
receiver = flexmock
|
60
63
|
receiver.should_receive(:start_export).once.with(1920, 1080)
|
61
64
|
receiver.should_receive(:start_tracker_segment).once.with("Tracker")
|
62
|
-
receiver.should_receive(:export_point).once.with(1,
|
65
|
+
receiver.should_receive(:export_point).once.with(1, approx(0.984), approx(0.991), 0)
|
63
66
|
receiver.should_receive(:end_tracker_segment).once
|
64
67
|
receiver.should_receive(:end_export).once
|
65
68
|
|
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.
|
8
|
+
s.version = "2.10.0"
|
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-
|
12
|
+
s.date = "2012-05-30"
|
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"]
|
@@ -198,6 +198,7 @@ Gem::Specification.new do |s|
|
|
198
198
|
s.add_runtime_dependency(%q<flame_channel_parser>, ["~> 4.0"])
|
199
199
|
s.add_runtime_dependency(%q<progressbar>, ["= 0.10.0"])
|
200
200
|
s.add_runtime_dependency(%q<update_hints>, ["~> 1.0"])
|
201
|
+
s.add_development_dependency(%q<approximately>, [">= 0"])
|
201
202
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
202
203
|
s.add_development_dependency(%q<rake>, [">= 0"])
|
203
204
|
s.add_development_dependency(%q<flexmock>, ["~> 0.8"])
|
@@ -208,6 +209,7 @@ Gem::Specification.new do |s|
|
|
208
209
|
s.add_dependency(%q<flame_channel_parser>, ["~> 4.0"])
|
209
210
|
s.add_dependency(%q<progressbar>, ["= 0.10.0"])
|
210
211
|
s.add_dependency(%q<update_hints>, ["~> 1.0"])
|
212
|
+
s.add_dependency(%q<approximately>, [">= 0"])
|
211
213
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
212
214
|
s.add_dependency(%q<rake>, [">= 0"])
|
213
215
|
s.add_dependency(%q<flexmock>, ["~> 0.8"])
|
@@ -219,6 +221,7 @@ Gem::Specification.new do |s|
|
|
219
221
|
s.add_dependency(%q<flame_channel_parser>, ["~> 4.0"])
|
220
222
|
s.add_dependency(%q<progressbar>, ["= 0.10.0"])
|
221
223
|
s.add_dependency(%q<update_hints>, ["~> 1.0"])
|
224
|
+
s.add_dependency(%q<approximately>, [">= 0"])
|
222
225
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
223
226
|
s.add_dependency(%q<rake>, [">= 0"])
|
224
227
|
s.add_dependency(%q<flexmock>, ["~> 0.8"])
|
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.
|
4
|
+
version: 2.10.0
|
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-
|
12
|
+
date: 2012-05-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: obuf
|
16
|
-
requirement: &
|
16
|
+
requirement: &81500 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *81500
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: progressive_io
|
27
|
-
requirement: &
|
27
|
+
requirement: &80900 !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: *80900
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: flame_channel_parser
|
38
|
-
requirement: &
|
38
|
+
requirement: &80430 !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: *80430
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: progressbar
|
49
|
-
requirement: &
|
49
|
+
requirement: &79900 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - =
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.10.0
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *79900
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: update_hints
|
60
|
-
requirement: &
|
60
|
+
requirement: &79370 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,21 @@ dependencies:
|
|
65
65
|
version: '1.0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *79370
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: approximately
|
71
|
+
requirement: &79050 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *79050
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: jeweler
|
71
|
-
requirement: &
|
82
|
+
requirement: &78640 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ! '>='
|
@@ -76,10 +87,10 @@ dependencies:
|
|
76
87
|
version: '0'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *78640
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: rake
|
82
|
-
requirement: &
|
93
|
+
requirement: &78050 !ruby/object:Gem::Requirement
|
83
94
|
none: false
|
84
95
|
requirements:
|
85
96
|
- - ! '>='
|
@@ -87,10 +98,10 @@ dependencies:
|
|
87
98
|
version: '0'
|
88
99
|
type: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *78050
|
91
102
|
- !ruby/object:Gem::Dependency
|
92
103
|
name: flexmock
|
93
|
-
requirement: &
|
104
|
+
requirement: &524110 !ruby/object:Gem::Requirement
|
94
105
|
none: false
|
95
106
|
requirements:
|
96
107
|
- - ~>
|
@@ -98,10 +109,10 @@ dependencies:
|
|
98
109
|
version: '0.8'
|
99
110
|
type: :development
|
100
111
|
prerelease: false
|
101
|
-
version_requirements: *
|
112
|
+
version_requirements: *524110
|
102
113
|
- !ruby/object:Gem::Dependency
|
103
114
|
name: cli_test
|
104
|
-
requirement: &
|
115
|
+
requirement: &522630 !ruby/object:Gem::Requirement
|
105
116
|
none: false
|
106
117
|
requirements:
|
107
118
|
- - ~>
|
@@ -109,7 +120,7 @@ dependencies:
|
|
109
120
|
version: '1.0'
|
110
121
|
type: :development
|
111
122
|
prerelease: false
|
112
|
-
version_requirements: *
|
123
|
+
version_requirements: *522630
|
113
124
|
description: Converts 2D track exports between different apps like Flame, MatchMover,
|
114
125
|
PFTrack...
|
115
126
|
email: me@julik.nl
|
@@ -299,7 +310,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
299
310
|
version: '0'
|
300
311
|
segments:
|
301
312
|
- 0
|
302
|
-
hash:
|
313
|
+
hash: -819741475
|
303
314
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
304
315
|
none: false
|
305
316
|
requirements:
|