flame_channel_parser 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/Manifest.txt +10 -2
- data/Rakefile +2 -1
- data/bin/bake_flame_channel +31 -0
- data/lib/extractor.rb +40 -0
- data/lib/flame_channel_parser.rb +6 -6
- data/lib/interpolator.rb +11 -4
- data/lib/parser_2011.rb +23 -8
- data/lib/parser_2012.rb +5 -6
- data/lib/segments.rb +1 -0
- data/test/snaps/RefT_Steadicam.timewarp +94 -0
- data/test/snaps/RefT_Steadicam_Baked.timewarp +3498 -0
- data/test/snaps/RefT_Steadicam_Extraction.txt +190 -0
- data/test/snaps/RefT_Steadicam_Extraction_F19_to_347.txt +329 -0
- data/test/snaps/RefT_Steadicam_TwoKFs.timewarp +79 -0
- data/test/snaps/RefT_Steadicam_TwoKFs_AnotherSlope.timewarp +79 -0
- data/test/snaps/RefT_Steadicam_TwoKFs_HermiteAtBegin.timewarp +80 -0
- data/test/test_extractor.rb +26 -0
- data/test/test_flame_channel_parser.rb +6 -1
- data/test/test_interpolator.rb +42 -0
- metadata +33 -10
- data/plots.numbers +0 -0
- data/plots_2012.numbers +0 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
TimewarpFileVersion 1.0
|
2
|
+
CreationDate Tue May 24 14:40:33 2011
|
3
|
+
|
4
|
+
|
5
|
+
Fields 0
|
6
|
+
Frames 230
|
7
|
+
Origin 1
|
8
|
+
RenderType no
|
9
|
+
SamplingStep 0
|
10
|
+
Interpolation 0
|
11
|
+
FlowQuality 2
|
12
|
+
Animation
|
13
|
+
Channel Speed
|
14
|
+
Extrapolation constant
|
15
|
+
Value -200
|
16
|
+
Size 2
|
17
|
+
KeyVersion 1
|
18
|
+
Key 0
|
19
|
+
Frame 41
|
20
|
+
Value -200
|
21
|
+
Interpolation constant
|
22
|
+
RightAutomaticSlope no
|
23
|
+
LeftAutomaticSlope no
|
24
|
+
BreakSlope yes
|
25
|
+
End
|
26
|
+
Key 1
|
27
|
+
Frame 230
|
28
|
+
Value 0
|
29
|
+
Interpolation constant
|
30
|
+
RightAutomaticSlope no
|
31
|
+
LeftAutomaticSlope no
|
32
|
+
BreakSlope yes
|
33
|
+
End
|
34
|
+
Uncollapsed
|
35
|
+
End
|
36
|
+
Channel Timing/Timing
|
37
|
+
Extrapolation linear
|
38
|
+
Value 459
|
39
|
+
Size 2
|
40
|
+
KeyVersion 1
|
41
|
+
Key 0
|
42
|
+
Frame 41
|
43
|
+
Value 379
|
44
|
+
Interpolation linear
|
45
|
+
RightSlope 1
|
46
|
+
RightAutomaticSlope no
|
47
|
+
LeftAutomaticSlope no
|
48
|
+
End
|
49
|
+
Key 1
|
50
|
+
Frame 230
|
51
|
+
Value 1
|
52
|
+
Interpolation linear
|
53
|
+
RightSlope -2
|
54
|
+
LeftSlope -2
|
55
|
+
End
|
56
|
+
Uncollapsed
|
57
|
+
End
|
58
|
+
Channel Mix/Mix
|
59
|
+
Extrapolation constant
|
60
|
+
Value 0
|
61
|
+
End
|
62
|
+
Channel Trail/Pre_Trail
|
63
|
+
Extrapolation constant
|
64
|
+
Value 1
|
65
|
+
End
|
66
|
+
Channel Trail/Pre_Weight
|
67
|
+
Extrapolation constant
|
68
|
+
Value 100
|
69
|
+
End
|
70
|
+
Channel Trail/Post_Trail
|
71
|
+
Extrapolation constant
|
72
|
+
Value 1
|
73
|
+
End
|
74
|
+
Channel Trail/Post_Weight
|
75
|
+
Extrapolation constant
|
76
|
+
Value 100
|
77
|
+
End
|
78
|
+
ChannelEnd
|
79
|
+
End
|
@@ -0,0 +1,79 @@
|
|
1
|
+
TimewarpFileVersion 1.0
|
2
|
+
CreationDate Tue May 24 14:42:03 2011
|
3
|
+
|
4
|
+
|
5
|
+
Fields 0
|
6
|
+
Frames 230
|
7
|
+
Origin 1
|
8
|
+
RenderType no
|
9
|
+
SamplingStep 0
|
10
|
+
Interpolation 0
|
11
|
+
FlowQuality 2
|
12
|
+
Animation
|
13
|
+
Channel Speed
|
14
|
+
Extrapolation constant
|
15
|
+
Value -315.344
|
16
|
+
Size 2
|
17
|
+
KeyVersion 1
|
18
|
+
Key 0
|
19
|
+
Frame 41
|
20
|
+
Value -315.344
|
21
|
+
Interpolation constant
|
22
|
+
RightAutomaticSlope no
|
23
|
+
LeftAutomaticSlope no
|
24
|
+
BreakSlope yes
|
25
|
+
End
|
26
|
+
Key 1
|
27
|
+
Frame 230
|
28
|
+
Value 0
|
29
|
+
Interpolation constant
|
30
|
+
RightAutomaticSlope no
|
31
|
+
LeftAutomaticSlope no
|
32
|
+
BreakSlope yes
|
33
|
+
End
|
34
|
+
Uncollapsed
|
35
|
+
End
|
36
|
+
Channel Timing/Timing
|
37
|
+
Extrapolation linear
|
38
|
+
Value 379
|
39
|
+
Size 2
|
40
|
+
KeyVersion 1
|
41
|
+
Key 0
|
42
|
+
Frame 41
|
43
|
+
Value 379
|
44
|
+
Interpolation linear
|
45
|
+
RightSlope 1
|
46
|
+
RightAutomaticSlope no
|
47
|
+
LeftAutomaticSlope no
|
48
|
+
End
|
49
|
+
Key 1
|
50
|
+
Frame 230
|
51
|
+
Value -217
|
52
|
+
Interpolation linear
|
53
|
+
RightSlope -3.15344
|
54
|
+
LeftSlope -3.15344
|
55
|
+
End
|
56
|
+
Uncollapsed
|
57
|
+
End
|
58
|
+
Channel Mix/Mix
|
59
|
+
Extrapolation constant
|
60
|
+
Value 0
|
61
|
+
End
|
62
|
+
Channel Trail/Pre_Trail
|
63
|
+
Extrapolation constant
|
64
|
+
Value 1
|
65
|
+
End
|
66
|
+
Channel Trail/Pre_Weight
|
67
|
+
Extrapolation constant
|
68
|
+
Value 100
|
69
|
+
End
|
70
|
+
Channel Trail/Post_Trail
|
71
|
+
Extrapolation constant
|
72
|
+
Value 1
|
73
|
+
End
|
74
|
+
Channel Trail/Post_Weight
|
75
|
+
Extrapolation constant
|
76
|
+
Value 100
|
77
|
+
End
|
78
|
+
ChannelEnd
|
79
|
+
End
|
@@ -0,0 +1,80 @@
|
|
1
|
+
TimewarpFileVersion 1.0
|
2
|
+
CreationDate Tue May 24 14:45:21 2011
|
3
|
+
|
4
|
+
|
5
|
+
Fields 0
|
6
|
+
Frames 230
|
7
|
+
Origin 1
|
8
|
+
RenderType no
|
9
|
+
SamplingStep 0
|
10
|
+
Interpolation 0
|
11
|
+
FlowQuality 2
|
12
|
+
Animation
|
13
|
+
Channel Speed
|
14
|
+
Extrapolation constant
|
15
|
+
Value -761.93
|
16
|
+
Size 2
|
17
|
+
KeyVersion 1
|
18
|
+
Key 0
|
19
|
+
Frame 41
|
20
|
+
Value -761.93
|
21
|
+
Interpolation hermite
|
22
|
+
RightAutomaticSlope no
|
23
|
+
LeftAutomaticSlope no
|
24
|
+
BreakSlope yes
|
25
|
+
End
|
26
|
+
Key 1
|
27
|
+
Frame 230
|
28
|
+
Value 0
|
29
|
+
Interpolation constant
|
30
|
+
LeftSlope -14.1773
|
31
|
+
RightAutomaticSlope no
|
32
|
+
LeftAutomaticSlope no
|
33
|
+
BreakSlope yes
|
34
|
+
End
|
35
|
+
Uncollapsed
|
36
|
+
End
|
37
|
+
Channel Timing/Timing
|
38
|
+
Extrapolation linear
|
39
|
+
Value 379
|
40
|
+
Size 2
|
41
|
+
KeyVersion 1
|
42
|
+
Key 0
|
43
|
+
Frame 41
|
44
|
+
Value 379
|
45
|
+
Interpolation hermite
|
46
|
+
RightSlope -7.6193
|
47
|
+
RightAutomaticSlope no
|
48
|
+
LeftAutomaticSlope no
|
49
|
+
End
|
50
|
+
Key 1
|
51
|
+
Frame 230
|
52
|
+
Value -217
|
53
|
+
Interpolation linear
|
54
|
+
RightSlope -3.15344
|
55
|
+
LeftSlope -3.15344
|
56
|
+
End
|
57
|
+
Uncollapsed
|
58
|
+
End
|
59
|
+
Channel Mix/Mix
|
60
|
+
Extrapolation constant
|
61
|
+
Value 0
|
62
|
+
End
|
63
|
+
Channel Trail/Pre_Trail
|
64
|
+
Extrapolation constant
|
65
|
+
Value 1
|
66
|
+
End
|
67
|
+
Channel Trail/Pre_Weight
|
68
|
+
Extrapolation constant
|
69
|
+
Value 100
|
70
|
+
End
|
71
|
+
Channel Trail/Post_Trail
|
72
|
+
Extrapolation constant
|
73
|
+
Value 1
|
74
|
+
End
|
75
|
+
Channel Trail/Post_Weight
|
76
|
+
Extrapolation constant
|
77
|
+
Value 100
|
78
|
+
End
|
79
|
+
ChannelEnd
|
80
|
+
End
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "stringio"
|
3
|
+
|
4
|
+
require File.dirname(__FILE__) + "/../lib/flame_channel_parser"
|
5
|
+
|
6
|
+
class TestExtractor < Test::Unit::TestCase
|
7
|
+
def test_basic_op
|
8
|
+
io = StringIO.new
|
9
|
+
FlameChannelParser::Extractor.extract(File.dirname(__FILE__) + "/snaps/RefT_Steadicam.timewarp", :destination => io)
|
10
|
+
assert_equal File.read(File.dirname(__FILE__) + "/snaps/RefT_Steadicam_Extraction.txt"), io.string
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_frame_overrides
|
14
|
+
io = StringIO.new
|
15
|
+
o = {:destination => io, :start_frame => 19, :end_frame => 347 }
|
16
|
+
FlameChannelParser::Extractor.extract(File.dirname(__FILE__) + "/snaps/RefT_Steadicam.timewarp", o)
|
17
|
+
|
18
|
+
assert_equal File.read(File.dirname(__FILE__) + "/snaps/RefT_Steadicam_Extraction_F19_to_347.txt"), io.string
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_raises_on_Missing_channel
|
22
|
+
assert_raise(FlameChannelParser::Extractor::ChannelNotFoundError) do
|
23
|
+
FlameChannelParser::Extractor.extract(File.dirname(__FILE__) + "/snaps/RefT_Steadicam.timewarp", :channel => "foo/bar")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -18,7 +18,7 @@ class TestFlameChannelParser < Test::Unit::TestCase
|
|
18
18
|
assert_kind_of Array, channels
|
19
19
|
assert_equal 1, channels.length, "Should find one channel"
|
20
20
|
|
21
|
-
assert_kind_of FlameChannelParser::Parser2011::
|
21
|
+
assert_kind_of FlameChannelParser::Parser2011::Channel, channels[0]
|
22
22
|
|
23
23
|
ch = channels[0]
|
24
24
|
assert_equal 4, ch.length
|
@@ -39,7 +39,12 @@ class TestFlameChannelParser < Test::Unit::TestCase
|
|
39
39
|
channels.reject!{|c| c.length < 2 }
|
40
40
|
assert_equal 2, channels.length, "Should have 2 channels with more than 2 keyframes"
|
41
41
|
last_chan = channels[-1]
|
42
|
+
|
42
43
|
assert_equal "position/y", last_chan.name
|
44
|
+
assert_equal "Axis", last_chan.node_type
|
45
|
+
assert_equal "axis1", last_chan.node_name
|
46
|
+
assert_equal "axis1/position/y", last_chan.path
|
47
|
+
|
43
48
|
assert_equal 6, last_chan.length
|
44
49
|
i = last_chan.to_interpolator
|
45
50
|
assert_kind_of FlameChannelParser::Interpolator, i
|
data/test/test_interpolator.rb
CHANGED
@@ -105,4 +105,46 @@ class TestInterpolator < Test::Unit::TestCase
|
|
105
105
|
assert_in_delta 374.75, interp.sample_at(300), DELTA
|
106
106
|
end
|
107
107
|
|
108
|
+
def test_descending_linear_prepolate
|
109
|
+
data = File.open(File.dirname(__FILE__) + "/snaps/RefT_Steadicam.timewarp")
|
110
|
+
channels_in_tw = FlameChannelParser.parse(data)
|
111
|
+
chan = channels_in_tw.find{|c| c.name == "Timing/Timing"}
|
112
|
+
|
113
|
+
interp = chan.to_interpolator
|
114
|
+
assert_in_delta 459, interp.sample_at(1), DELTA
|
115
|
+
assert_in_delta 421, interp.sample_at(20), DELTA
|
116
|
+
assert_in_delta 1, interp.sample_at(230), DELTA
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_descending_linear_prepolate_two_KFs
|
120
|
+
data = File.open(File.dirname(__FILE__) + "/snaps/RefT_Steadicam_TwoKFs.timewarp")
|
121
|
+
channels_in_tw = FlameChannelParser.parse(data)
|
122
|
+
chan = channels_in_tw.find{|c| c.name == "Timing/Timing"}
|
123
|
+
|
124
|
+
interp = chan.to_interpolator
|
125
|
+
assert_in_delta 459, interp.sample_at(1), DELTA
|
126
|
+
assert_in_delta 421, interp.sample_at(20), DELTA
|
127
|
+
assert_in_delta 1, interp.sample_at(230), DELTA
|
128
|
+
assert_in_delta -39, interp.sample_at(250), DELTA
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_descending_linear_prepolate_two_KFs_different_slope
|
132
|
+
data = File.open(File.dirname(__FILE__) + "/snaps/RefT_Steadicam_TwoKFs_AnotherSlope.timewarp")
|
133
|
+
channels_in_tw = FlameChannelParser.parse(data)
|
134
|
+
chan = channels_in_tw.find{|c| c.name == "Timing/Timing"}
|
135
|
+
|
136
|
+
interp = chan.to_interpolator
|
137
|
+
assert_in_delta 379, interp.sample_at(41), DELTA
|
138
|
+
assert_in_delta 505.138, interp.sample_at(1), DELTA
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_descending_linear_prepolate_hermite
|
142
|
+
data = File.open(File.dirname(__FILE__) + "/snaps/RefT_Steadicam_TwoKFs_HermiteAtBegin.timewarp")
|
143
|
+
channels_in_tw = FlameChannelParser.parse(data)
|
144
|
+
chan = channels_in_tw.find{|c| c.name == "Timing/Timing"}
|
145
|
+
|
146
|
+
interp = chan.to_interpolator
|
147
|
+
assert_in_delta 379, interp.sample_at(41), DELTA
|
148
|
+
assert_in_delta 683.772, interp.sample_at(1), DELTA
|
149
|
+
end
|
108
150
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flame_channel_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Julik Tarkhanov
|
@@ -15,13 +15,27 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-25 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: update_hints
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: hoe
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
25
39
|
none: false
|
26
40
|
requirements:
|
27
41
|
- - ">="
|
@@ -33,14 +47,14 @@ dependencies:
|
|
33
47
|
- 1
|
34
48
|
version: 2.9.1
|
35
49
|
type: :development
|
36
|
-
version_requirements: *
|
50
|
+
version_requirements: *id002
|
37
51
|
description: |-
|
38
52
|
Includes a small library for extracting, parsing and baking animation curves made on Discrodesk Floke/Inflinto, also known as flame.
|
39
53
|
Thanks to Marijn Eken, Philippe Soeiro and Andre Gagnon for their support and advice.
|
40
54
|
email:
|
41
55
|
- me@julik.nl
|
42
|
-
executables:
|
43
|
-
|
56
|
+
executables:
|
57
|
+
- bake_flame_channel
|
44
58
|
extensions: []
|
45
59
|
|
46
60
|
extra_rdoc_files:
|
@@ -53,13 +67,13 @@ files:
|
|
53
67
|
- Manifest.txt
|
54
68
|
- README.rdoc
|
55
69
|
- Rakefile
|
70
|
+
- bin/bake_flame_channel
|
71
|
+
- lib/extractor.rb
|
56
72
|
- lib/flame_channel_parser.rb
|
57
73
|
- lib/interpolator.rb
|
58
74
|
- lib/parser_2011.rb
|
59
75
|
- lib/parser_2012.rb
|
60
76
|
- lib/segments.rb
|
61
|
-
- plots.numbers
|
62
|
-
- plots_2012.numbers
|
63
77
|
- test/channel_with_constants.dat
|
64
78
|
- test/sample_channel.dat
|
65
79
|
- test/snaps/FLEM_BrokenTangents.action
|
@@ -69,8 +83,16 @@ files:
|
|
69
83
|
- test/snaps/FLEM_curves_example.action
|
70
84
|
- test/snaps/FLEM_curves_example_migrated_to_2012.action
|
71
85
|
- test/snaps/FLEM_std_curve.png
|
86
|
+
- test/snaps/RefT_Steadicam.timewarp
|
87
|
+
- test/snaps/RefT_Steadicam_Baked.timewarp
|
88
|
+
- test/snaps/RefT_Steadicam_Extraction.txt
|
89
|
+
- test/snaps/RefT_Steadicam_Extraction_F19_to_347.txt
|
90
|
+
- test/snaps/RefT_Steadicam_TwoKFs.timewarp
|
91
|
+
- test/snaps/RefT_Steadicam_TwoKFs_AnotherSlope.timewarp
|
92
|
+
- test/snaps/RefT_Steadicam_TwoKFs_HermiteAtBegin.timewarp
|
72
93
|
- test/snaps/TW.timewarp
|
73
94
|
- test/snaps/TW_SingleFrameExtrapolated_from2011.timewarp
|
95
|
+
- test/test_extractor.rb
|
74
96
|
- test/test_flame_channel_parser.rb
|
75
97
|
- test/test_interpolator.rb
|
76
98
|
- test/test_segments.rb
|
@@ -111,6 +133,7 @@ signing_key:
|
|
111
133
|
specification_version: 3
|
112
134
|
summary: Includes a small library for extracting, parsing and baking animation curves made on Discrodesk Floke/Inflinto, also known as flame
|
113
135
|
test_files:
|
136
|
+
- test/test_extractor.rb
|
114
137
|
- test/test_flame_channel_parser.rb
|
115
138
|
- test/test_interpolator.rb
|
116
139
|
- test/test_segments.rb
|
data/plots.numbers
DELETED
Binary file
|
data/plots_2012.numbers
DELETED
Binary file
|