tickly 0.0.1
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/.document +5 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +48 -0
- data/lib/tickly.rb +91 -0
- data/lib/tickly/evaluator.rb +47 -0
- data/lib/tickly/parser.rb +123 -0
- data/test/helper.rb +18 -0
- data/test/nuke7_tracker_2tracks.nk +116 -0
- data/test/nuke_group.txt +19 -0
- data/test/nukenode.txt +11 -0
- data/test/one_tracker_with_break.nk +71 -0
- data/test/one_tracker_with_break_in_grp.nk +91 -0
- data/test/test_evaluator.rb +43 -0
- data/test/test_parser.rb +133 -0
- data/test/test_split_array.rb +20 -0
- data/test/three_nodes_and_roto.txt +137 -0
- data/test/tracker_with_differing_gaps.nk +82 -0
- data/test/tracker_with_repeating_gaps.nk +79 -0
- metadata +134 -0
data/test/nuke_group.txt
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
set cut_paste_input [stack 0]
|
2
|
+
version 6.3 v4
|
3
|
+
Group {
|
4
|
+
inputs 0
|
5
|
+
name Group1
|
6
|
+
selected true
|
7
|
+
}
|
8
|
+
CheckerBoard2 {
|
9
|
+
inputs 0
|
10
|
+
name CheckerBoard1
|
11
|
+
}
|
12
|
+
Blur {
|
13
|
+
size 42.5
|
14
|
+
name Blur1
|
15
|
+
}
|
16
|
+
Output {
|
17
|
+
name Output1
|
18
|
+
}
|
19
|
+
end_group
|
data/test/nukenode.txt
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
#! /Applications/Nuke5.1v2/Nuke5.1v2.app/Contents/MacOS/Nuke5.1v2 -nx
|
2
|
+
version 5.1200
|
3
|
+
define_window_layout_xml {<?xml version="1.0" encoding="UTF-8"?>
|
4
|
+
<layout version="1.0">
|
5
|
+
<window x="214" y="133" w="1680" h="1024" screen="0">
|
6
|
+
<splitter orientation="1">
|
7
|
+
<split size="1062"></split>
|
8
|
+
<splitter orientation="1">
|
9
|
+
<split size="40"></split>
|
10
|
+
<dock id="" hideTitles="1" activePageId="Toolbar.1">
|
11
|
+
<page id="Toolbar.1"></page>
|
12
|
+
</dock>
|
13
|
+
<split size="1018"></split>
|
14
|
+
<splitter orientation="2">
|
15
|
+
<split size="499"></split>
|
16
|
+
<dock id="" activePageId="Viewer.1">
|
17
|
+
<page id="Viewer.1"></page>
|
18
|
+
</dock>
|
19
|
+
<split size="499"></split>
|
20
|
+
<dock id="" activePageId="Curve Editor.1">
|
21
|
+
<page id="DAG.1"></page>
|
22
|
+
<page id="Curve Editor.1"></page>
|
23
|
+
</dock>
|
24
|
+
</splitter>
|
25
|
+
</splitter>
|
26
|
+
<split size="614"></split>
|
27
|
+
<dock id="" activePageId="Properties.1">
|
28
|
+
<page id="Properties.1"></page>
|
29
|
+
</dock>
|
30
|
+
</splitter>
|
31
|
+
</window>
|
32
|
+
</layout>
|
33
|
+
}
|
34
|
+
Root {
|
35
|
+
inputs 0
|
36
|
+
name /Code/apps/tracksperanto/test/samples/one_tracker_with_break.nk
|
37
|
+
frame 763
|
38
|
+
last_frame 1580
|
39
|
+
lock_range true
|
40
|
+
format "640 480 0 0 640 480 1 PC_Video"
|
41
|
+
proxy_type scale
|
42
|
+
proxy_format "640 480 0 0 640 480 1 PC_Video"
|
43
|
+
}
|
44
|
+
Read {
|
45
|
+
inputs 0
|
46
|
+
file /Users/julik/Desktop/Storm/E036/E036_L005.%04d.dpx
|
47
|
+
format "2048 1176 0 0 2048 1176 1 "
|
48
|
+
last 1580
|
49
|
+
timecode 03:38:32:07
|
50
|
+
edge_code "02 05 17 3388 6703 60"
|
51
|
+
name Read1
|
52
|
+
xpos -271
|
53
|
+
ypos -90
|
54
|
+
}
|
55
|
+
Tracker3 {
|
56
|
+
track1 {{curve i x742 888 890.2463989 891.6602783 893.5056763 895.6155396 s95 897.2791748 899.1762695 901.6463623 903.6976318 905.1331177 907.3597412 909.7727051 912.0731812 913.7190552 916.0959473 918.1025391 920.0751953 922.1898804 924.6269531 926.2683716 928.2131348 930.7736206} {curve i x742 406 405.3980103 404.867981 404.1585083 403.6867065 403.1013489 402.463623 401.933136 401.3148499 400.4875183 399.8830566 399.3424377 398.5214233 398.1871033 397.5262756 396.8475647 396.2599182 395.5371399 395.1407166 394.3450928 393.7192078 392.8123474}}
|
57
|
+
enable2 true
|
58
|
+
track2 {{curve x742 1105 1107.277466 1108.645996 1110.494629 1112.658691 1114.258179 1116.237061 1118.607788 1120.709717 1122.134155 1124.373779 1126.885132 1129.21936 1130.868164 1133.252686 1135.243896 1137.268188 1139.385376 1141.824097 1143.422974 1145.289551 1147.972412} {curve x742 524 523.3273926 522.723999 521.8934326 521.4053955 520.6884766 520.0819092 519.5550537 518.897644 518.0953369 517.442688 516.8226929 516.0817871 515.673584 515.0698853 514.3513184 513.664917 512.9036865 512.5012817 511.5973511 510.9969482 510.1079407}}
|
59
|
+
translate {{curve i x742 0 2.246398926 3.66027832 5.50567627 7.615539551 9.279174805 11.17626953 13.6463623 15.69763184 17.13311768 19.35974121 21.77270508 24.07318115 25.71905518 28.09594727 30.10253906 32.07519531 34.18988037 36.62695312 38.26837158 40.21313477 42.77362061} {curve i x742 0 -0.6019897461 -1.132019043 -1.841491699 -2.313293457 -2.898651123 -3.536376953 -4.066864014 -4.685150146 -5.512481689 -6.116943359 -6.657562256 -7.47857666 -7.812896729 -8.473724365 -9.152435303 -9.740081787 -10.46286011 -10.85928345 -11.65490723 -12.28079224 -13.18765259}}
|
60
|
+
center {{curve i x742 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888} {curve i x742 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406}}
|
61
|
+
name Tracker1
|
62
|
+
selected true
|
63
|
+
xpos -271
|
64
|
+
ypos -4
|
65
|
+
}
|
66
|
+
Viewer {
|
67
|
+
frame 763
|
68
|
+
name Viewer1
|
69
|
+
xpos 10
|
70
|
+
ypos -10
|
71
|
+
}
|
@@ -0,0 +1,91 @@
|
|
1
|
+
#! /Applications/Nuke5.1v2/Nuke5.1v2.app/Contents/MacOS/Nuke5.1v2 -nx
|
2
|
+
version 5.1200
|
3
|
+
define_window_layout_xml {<?xml version="1.0" encoding="UTF-8"?>
|
4
|
+
<layout version="1.0">
|
5
|
+
<window x="214" y="133" w="1680" h="1024" screen="0">
|
6
|
+
<splitter orientation="1">
|
7
|
+
<split size="1062"></split>
|
8
|
+
<splitter orientation="1">
|
9
|
+
<split size="40"></split>
|
10
|
+
<dock id="" hideTitles="1" activePageId="Toolbar.1">
|
11
|
+
<page id="Toolbar.1"></page>
|
12
|
+
</dock>
|
13
|
+
<split size="1018"></split>
|
14
|
+
<splitter orientation="2">
|
15
|
+
<split size="499"></split>
|
16
|
+
<dock id="" activePageId="Viewer.1">
|
17
|
+
<page id="Viewer.1"></page>
|
18
|
+
</dock>
|
19
|
+
<split size="499"></split>
|
20
|
+
<dock id="" activePageId="DAG.1">
|
21
|
+
<page id="DAG.1"></page>
|
22
|
+
<page id="Curve Editor.1"></page>
|
23
|
+
<page id="DAG.2"></page>
|
24
|
+
</dock>
|
25
|
+
</splitter>
|
26
|
+
</splitter>
|
27
|
+
<split size="614"></split>
|
28
|
+
<dock id="" activePageId="Properties.1">
|
29
|
+
<page id="Properties.1"></page>
|
30
|
+
</dock>
|
31
|
+
</splitter>
|
32
|
+
</window>
|
33
|
+
</layout>
|
34
|
+
}
|
35
|
+
Root {
|
36
|
+
inputs 0
|
37
|
+
name /Code/apps/tracksperanto/test/samples/one_tracker_with_break_in_grp.nk
|
38
|
+
frame 763
|
39
|
+
last_frame 1580
|
40
|
+
lock_range true
|
41
|
+
format "640 480 0 0 640 480 1 PC_Video"
|
42
|
+
proxy_type scale
|
43
|
+
proxy_format "640 480 0 0 640 480 1 PC_Video"
|
44
|
+
}
|
45
|
+
Read {
|
46
|
+
inputs 0
|
47
|
+
file /Users/julik/Desktop/Storm/E036/E036_L005.%04d.dpx
|
48
|
+
format "2048 1176 0 0 2048 1176 1 "
|
49
|
+
last 1580
|
50
|
+
timecode 03:38:32:07
|
51
|
+
edge_code "02 05 17 3388 6703 60"
|
52
|
+
name Read1
|
53
|
+
xpos -271
|
54
|
+
ypos -195
|
55
|
+
}
|
56
|
+
Group {
|
57
|
+
name Group1
|
58
|
+
selected true
|
59
|
+
xpos -171
|
60
|
+
ypos -93
|
61
|
+
}
|
62
|
+
Input {
|
63
|
+
inputs 0
|
64
|
+
name Input1
|
65
|
+
xpos -227
|
66
|
+
ypos -113
|
67
|
+
}
|
68
|
+
Tracker3 {
|
69
|
+
track1 {{curve x742 888 890.2463989 891.6602783 893.5056763 895.6155396 s95 897.2791748 899.1762695 901.6463623 903.6976318 905.1331177 907.3597412 909.7727051 912.0731812 913.7190552 916.0959473 918.1025391 920.0751953 922.1898804 924.6269531 926.2683716 928.2131348 930.7736206} {curve x742 406 405.3980103 404.867981 404.1585083 403.6867065 403.1013489 402.463623 401.933136 401.3148499 400.4875183 399.8830566 399.3424377 398.5214233 398.1871033 397.5262756 396.8475647 396.2599182 395.5371399 395.1407166 394.3450928 393.7192078 392.8123474}}
|
70
|
+
enable2 true
|
71
|
+
track2 {{curve i x742 1105 1107.277466 1108.645996 1110.494629 1112.658691 1114.258179 1116.237061 1118.607788 1120.709717 1122.134155 1124.373779 1126.885132 1129.21936 1130.868164 1133.252686 1135.243896 1137.268188 1139.385376 1141.824097 1143.422974 1145.289551 1147.972412} {curve i x742 524 523.3273926 522.723999 521.8934326 521.4053955 520.6884766 520.0819092 519.5550537 518.897644 518.0953369 517.442688 516.8226929 516.0817871 515.673584 515.0698853 514.3513184 513.664917 512.9036865 512.5012817 511.5973511 510.9969482 510.1079407}}
|
72
|
+
translate {{curve i x742 0 2.246398926 3.66027832 5.50567627 7.615539551 9.279174805 11.17626953 13.6463623 15.69763184 17.13311768 19.35974121 21.77270508 24.07318115 25.71905518 28.09594727 30.10253906 32.07519531 34.18988037 36.62695312 38.26837158 40.21313477 42.77362061} {curve i x742 0 -0.6019897461 -1.132019043 -1.841491699 -2.313293457 -2.898651123 -3.536376953 -4.066864014 -4.685150146 -5.512481689 -6.116943359 -6.657562256 -7.47857666 -7.812896729 -8.473724365 -9.152435303 -9.740081787 -10.46286011 -10.85928345 -11.65490723 -12.28079224 -13.18765259}}
|
73
|
+
center {{curve i x742 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888} {curve i x742 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406 406}}
|
74
|
+
name Tracker1
|
75
|
+
xpos -227
|
76
|
+
ypos -73
|
77
|
+
}
|
78
|
+
Output {
|
79
|
+
name Output1
|
80
|
+
xpos -227
|
81
|
+
ypos 27
|
82
|
+
}
|
83
|
+
end_group
|
84
|
+
push 0
|
85
|
+
Viewer {
|
86
|
+
inputs 2
|
87
|
+
frame 763
|
88
|
+
name Viewer1
|
89
|
+
xpos -271
|
90
|
+
ypos -6
|
91
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestEvaluator < Test::Unit::TestCase
|
4
|
+
include Tickly::Emitter
|
5
|
+
|
6
|
+
should "not do anything without handlers" do
|
7
|
+
stack = le("Tracker4", le(le("enabled", "true")))
|
8
|
+
e = Tickly::Evaluator.new
|
9
|
+
e.evaluate(stack)
|
10
|
+
end
|
11
|
+
|
12
|
+
class ShouldNotBeInstantiated
|
13
|
+
def initialize
|
14
|
+
raise "You failed"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
should "not send anything to the handler when the expr does not conform to the standard" do
|
19
|
+
stack = le("ShouldNotBeInstantiated")
|
20
|
+
e = Tickly::Evaluator.new
|
21
|
+
e.add_node_handler_class(ShouldNotBeInstantiated)
|
22
|
+
assert_nothing_raised { e.evaluate(stack) }
|
23
|
+
end
|
24
|
+
|
25
|
+
class SomeNode
|
26
|
+
attr_reader :options
|
27
|
+
def initialize(options_hash)
|
28
|
+
@options = options_hash
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
should "instantiate the handler class" do
|
33
|
+
stack = le("SomeNode", le(le("foo", "bar"), le("baz", "bad")))
|
34
|
+
e = Tickly::Evaluator.new
|
35
|
+
e.add_node_handler_class(SomeNode)
|
36
|
+
node = e.evaluate(stack)
|
37
|
+
|
38
|
+
assert_kind_of SomeNode, node
|
39
|
+
ref_o = {"foo" => "bar", "baz" => "bad"}
|
40
|
+
assert_equal ref_o, node.options
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/test/test_parser.rb
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestParser < Test::Unit::TestCase
|
4
|
+
P = Tickly::Parser.new
|
5
|
+
include Tickly::Emitter
|
6
|
+
|
7
|
+
should "parse a single int as a stack with a string" do
|
8
|
+
assert_kind_of Tickly::LiteralExpr, P.parse('2')
|
9
|
+
assert_equal le("2"), P.parse('2')
|
10
|
+
end
|
11
|
+
|
12
|
+
should "parse a single int and discard whitespace" do
|
13
|
+
p = P.parse(' 2 ')
|
14
|
+
assert_kind_of Tickly::LiteralExpr, p
|
15
|
+
assert_equal le("2"), p
|
16
|
+
assert_equal "{2}", Tickly.to_tcl(p)
|
17
|
+
end
|
18
|
+
|
19
|
+
should "parse multiple ints and strings as a stack of subexpressions" do
|
20
|
+
assert_kind_of Tickly::LiteralExpr, P.parse('2 foo bar baz')
|
21
|
+
assert_equal le("2", "foo", "bar", "baz"), P.parse('2 foo bar baz')
|
22
|
+
end
|
23
|
+
|
24
|
+
should "parse and expand a string in double quotes" do
|
25
|
+
p = P.parse('"This is a string literal with spaces"')
|
26
|
+
assert_equal le("This is a string literal with spaces"), p
|
27
|
+
|
28
|
+
p = P.parse('"This is a string literal \"escaped\" with spaces"')
|
29
|
+
assert_equal le("This is a string literal \"escaped\" with spaces"), p
|
30
|
+
end
|
31
|
+
|
32
|
+
should "parse a string expression" do
|
33
|
+
p = P.parse("[1 2 3]")
|
34
|
+
assert_kind_of Tickly::LiteralExpr, p
|
35
|
+
assert_equal 1, p.length
|
36
|
+
assert_kind_of Tickly::StringExpr, p[0]
|
37
|
+
end
|
38
|
+
|
39
|
+
should "parse multiple string expressions" do
|
40
|
+
p = P.parse("[1 2 3] [3 4 5 foo]")
|
41
|
+
assert_equal le(se("1", "2", "3"), se("3", "4", "5", "foo")), p
|
42
|
+
end
|
43
|
+
|
44
|
+
should "parse multiline statements as literal expressions" do
|
45
|
+
p = P.parse("2\n2")
|
46
|
+
assert_equal "{{2} {2}}", Tickly.to_tcl(p)
|
47
|
+
end
|
48
|
+
|
49
|
+
should 'parse expression' do
|
50
|
+
expr = '{4 + 5}'
|
51
|
+
p = P.parse(expr)
|
52
|
+
assert_equal le(le("4", "+", "5")), p
|
53
|
+
end
|
54
|
+
|
55
|
+
should 'parse a Nuke node' do
|
56
|
+
f = File.open(File.dirname(__FILE__) + "/nukenode.txt")
|
57
|
+
p = P.parse(f)
|
58
|
+
script = le(
|
59
|
+
le("set", "cut_paste_input", se("stack", "0")),
|
60
|
+
le("version", "6.3", "v4"),
|
61
|
+
le("push", "$cut_paste_input"),
|
62
|
+
le("Blur",
|
63
|
+
le(
|
64
|
+
le("size",
|
65
|
+
le(
|
66
|
+
le("curve", "x1", "0", "x20", "1.7", "x33", "3.9")
|
67
|
+
)
|
68
|
+
),
|
69
|
+
le("name", "Blur1"),
|
70
|
+
le("label", "With \"Escapes\""),
|
71
|
+
le("selected", "true"),
|
72
|
+
le("xpos", "-353"),
|
73
|
+
le("ypos", "-33")
|
74
|
+
)
|
75
|
+
)
|
76
|
+
)
|
77
|
+
assert_equal script, p
|
78
|
+
end
|
79
|
+
|
80
|
+
should 'parse a simple Nuke script and internalize the RotoPaint in it' do
|
81
|
+
f = File.open(File.dirname(__FILE__) + "/three_nodes_and_roto.txt")
|
82
|
+
p = P.parse(f)
|
83
|
+
# Should pass through the rotopaint node and get to the blur properly
|
84
|
+
blur = le("Blur",
|
85
|
+
le(
|
86
|
+
le("size",
|
87
|
+
le(
|
88
|
+
le("curve", "i", "x1", "0", "x20", "1.7", "x33", "3.9")
|
89
|
+
)
|
90
|
+
),
|
91
|
+
le("name", "Blur1"),
|
92
|
+
le("label", "With \"Escapes\""),
|
93
|
+
le("selected", "true"),
|
94
|
+
le("xpos", "-212"),
|
95
|
+
le("ypos", "-24")
|
96
|
+
)
|
97
|
+
)
|
98
|
+
assert_equal blur, p[4]
|
99
|
+
end
|
100
|
+
|
101
|
+
should 'parse a Nuke script with indentations' do
|
102
|
+
f = File.open(File.dirname(__FILE__) + "/nuke_group.txt")
|
103
|
+
p = P.parse(f)
|
104
|
+
grp = le(
|
105
|
+
le("set", "cut_paste_input", se("stack", "0")),
|
106
|
+
le("version", "6.3", "v4"),
|
107
|
+
le("Group",
|
108
|
+
le(
|
109
|
+
le("inputs", "0"),
|
110
|
+
le("name", "Group1"),
|
111
|
+
le("selected", "true")
|
112
|
+
)
|
113
|
+
),
|
114
|
+
le("CheckerBoard2",
|
115
|
+
le(
|
116
|
+
le("inputs", "0"),
|
117
|
+
le("name", "CheckerBoard1")
|
118
|
+
)
|
119
|
+
),
|
120
|
+
le("Blur",
|
121
|
+
le(
|
122
|
+
le("size", "42.5"),
|
123
|
+
le("name", "Blur1")
|
124
|
+
)
|
125
|
+
),
|
126
|
+
le("Output",
|
127
|
+
le("name", "Output1")
|
128
|
+
),
|
129
|
+
le("end_group")
|
130
|
+
)
|
131
|
+
assert_equal grp, p
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestSplitArray < Test::Unit::TestCase
|
4
|
+
should "return a standard array unscathed" do
|
5
|
+
assert_equal [1, 2, 3, 4], Tickly.split_array([1,2,3,4])
|
6
|
+
end
|
7
|
+
|
8
|
+
should "return a split array on nil" do
|
9
|
+
assert_equal [[1, 2], [3, 4]], Tickly.split_array([1, 2, nil, 3, 4])
|
10
|
+
end
|
11
|
+
|
12
|
+
class Jock < Array; end
|
13
|
+
|
14
|
+
should "properly use subclasses" do
|
15
|
+
s = Tickly.split_array(Jock.new([1, 2, nil, 3, 4]))
|
16
|
+
assert_kind_of Jock, s
|
17
|
+
assert_kind_of Jock, s[0]
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
set cut_paste_input [stack 0]
|
2
|
+
version 6.3 v4
|
3
|
+
CheckerBoard2 {
|
4
|
+
inputs 0
|
5
|
+
name CheckerBoard1
|
6
|
+
selected true
|
7
|
+
xpos -212
|
8
|
+
ypos -120
|
9
|
+
}
|
10
|
+
RotoPaint {
|
11
|
+
curves {AnimTree: "" {
|
12
|
+
Version: 1.2
|
13
|
+
Flag: 0
|
14
|
+
RootNode: 1
|
15
|
+
Node: {
|
16
|
+
NodeName: "Root" {
|
17
|
+
Flag: 512
|
18
|
+
NodeType: 1
|
19
|
+
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 1024 S 0 778
|
20
|
+
NumOfAttributes: 11
|
21
|
+
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
|
22
|
+
}
|
23
|
+
NumOfChildren: 4
|
24
|
+
Node: {
|
25
|
+
NodeName: "Bezier1" {
|
26
|
+
Flag: 576
|
27
|
+
NodeType: 3
|
28
|
+
CurveGroup: "" {
|
29
|
+
Transform: 0 0 S 1 33 0 S 1 33 0 S 1 33 0 S 1 33 1 S 1 33 1 S 1 33 0 S 1 33 826.667 S 1 33 984.667
|
30
|
+
Flag: 0
|
31
|
+
NumOfCubicCurves: 2
|
32
|
+
CubicCurve: "" {
|
33
|
+
Type: 0 Flag: 8192 Dim: 2
|
34
|
+
NumOfPoints: 9
|
35
|
+
0 S 1 33 0 S 1 33 320 0 0 S 1 33 620 S 1 33 1152 0 0 S 1 33 0 S 1 33 -320 0 0 S 1 33 -168 S 1 33 -128 0 0 S 1 33 812 S 1 33 730 0 0 S 1 33 168 S 1 33 128 0 0 S 1 33 34 S 1 33 -2 0 0 S 1 33 1048 S 1 33 1072 0 0 S 1 33 -34 S 1 33 2 0
|
36
|
+
}
|
37
|
+
CubicCurve: "" {
|
38
|
+
Type: 0 Flag: 8192 Dim: 2
|
39
|
+
NumOfPoints: 9
|
40
|
+
0 S 1 33 0 S 1 33 320 0 0 S 1 33 0 S 1 33 0 0 0 S 1 33 0 S 1 33 -320 0 0 S 1 33 -168 S 1 33 -128 0 0 S 1 33 0 S 1 33 0 0 0 S 1 33 168 S 1 33 128 0 0 S 1 33 34 S 1 33 -2 0 0 S 1 33 0 S 1 33 0 0 0 S 1 33 -34 S 1 33 2 0
|
41
|
+
}
|
42
|
+
NumOfAttributes: 44
|
43
|
+
"vis" S 0 1 "r" S 0 1 "g" S 0 1 "b" S 0 1 "a" S 0 1 "ro" S 0 0 "go" S 0 0 "bo" S 0 0 "ao" S 0 0 "opc" S 0 1 "bm" S 0 0 "inv" S 0 0 "mbo" S 0 0 "mb" S 0 1 "mbs" S 0 0.5 "mbsot" S 0 0 "mbso" S 0 0 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "src" S 0 0 "stx" S 0 0 "sty" S 0 0 "str" S 0 0 "sr" S 0 0 "ssx" S 0 1 "ssy" S 0 1 "ss" S 0 0 "spx" S 0 1024 "spy" S 0 778 "stot" S 0 0 "sto" S 0 0 "sv" S 0 0 "sf" S 0 1 "sb" S 0 1 "nv" S 0 1 "view1" S 0 1 "ltn" S 0 33 "ltm" S 0 33 "ltt" S 0 0 "tt" S 0 4 "pt" S 0 0
|
44
|
+
}
|
45
|
+
}
|
46
|
+
NumOfChildren: 0
|
47
|
+
}
|
48
|
+
Node: {
|
49
|
+
NodeName: "Brush3" {
|
50
|
+
Flag: 512
|
51
|
+
NodeType: 5
|
52
|
+
CubicCurve: "" {
|
53
|
+
Transform: 0 0 S 1 33 0 S 1 33 0 S 1 33 0 S 1 33 1 S 1 33 1 S 1 33 0 S 1 33 882.24 S 1 33 789.92
|
54
|
+
Type: 3 Flag: 2080 Dim: 3
|
55
|
+
NumOfPoints: 25
|
56
|
+
0 S 1 33 332 S 1 33 1018 S 1 33 1 0 0 S 1 33 342 S 1 33 1018 S 1 33 1 0 0 S 1 33 386 S 1 33 1018 S 1 33 1 0 0 S 1 33 482 S 1 33 984 S 1 33 1 0 0 S 1 33 602 S 1 33 936 S 1 33 1 0 0 S 1 33 716 S 1 33 896 S 1 33 1 0 0 S 1 33 798 S 1 33 868 S 1 33 1 0 0 S 1 33 894 S 1 33 840 S 1 33 1 0 0 S 1 33 930 S 1 33 838 S 1 33 1 0 0 S 1 33 966 S 1 33 834 S 1 33 1 0 0 S 1 33 980 S 1 33 834 S 1 33 1 0 0 S 1 33 998 S 1 33 834 S 1 33 1 0 0 S 1 33 1014 S 1 33 834 S 1 33 1 0 0 S 1 33 1038 S 1 33 834 S 1 33 1 0 0 S 1 33 1048 S 1 33 828 S 1 33 1 0 0 S 1 33 1060 S 1 33 822 S 1 33 1 0 0 S 1 33 1068 S 1 33 816 S 1 33 1 0 0 S 1 33 1080 S 1 33 802 S 1 33 1 0 0 S 1 33 1092 S 1 33 778 S 1 33 1 0 0 S 1 33 1098 S 1 33 748 S 1 33 1 0 0 S 1 33 1108 S 1 33 678 S 1 33 1 0 0 S 1 33 1092 S 1 33 570 S 1 33 1 0 0 S 1 33 1028 S 1 33 448 S 1 33 1 0 0 S 1 33 978 S 1 33 376 S 1 33 1 0 0 S 1 33 926 S 1 33 296 S 1 33 1 0
|
57
|
+
NumOfAttributes: 46
|
58
|
+
"vis" S 0 1 "r" S 0 1 "g" S 0 1 "b" S 0 1 "a" S 0 1 "ro" S 0 1 "go" S 0 1 "bo" S 0 1 "ao" S 0 1 "opc" S 0 1 "bs" S 0 25 "bsp" S 0 0.05 "h" S 0 0.2 "bm" S 0 0 "dt" S 0 1 "ds" S 0 0 "dh" S 0 0 "bt" S 0 0 "bu" S 0 1 "inv" S 0 0 "src" S 0 0 "stx" S 0 0 "sty" S 0 0 "str" S 0 0 "sr" S 0 0 "ssx" S 0 1 "ssy" S 0 1 "ss" S 0 0 "spx" S 0 1024 "spy" S 0 778 "stot" S 0 0 "sto" S 0 0 "sv" S 0 0 "sf" S 0 1 "sb" S 0 1 "ltn" S 0 33 "ltm" S 0 33 "ltt" S 0 2 "ws" S 0 0 "we" S 0 1 "ep1" S 0 0 "ep2" S 0 0 "ep3" S 0 0 "tt" S 0 14 "nv" S 0 1 "view1" S 0 1
|
59
|
+
}
|
60
|
+
}
|
61
|
+
NumOfChildren: 0
|
62
|
+
}
|
63
|
+
Node: {
|
64
|
+
NodeName: "Brush2" {
|
65
|
+
Flag: 512
|
66
|
+
NodeType: 5
|
67
|
+
CubicCurve: "" {
|
68
|
+
Transform: 0 0 S 1 33 0 S 1 33 0 S 1 33 0 S 1 33 1 S 1 33 1 S 1 33 0 S 1 33 664.487 S 1 33 404.973
|
69
|
+
Type: 3 Flag: 2080 Dim: 3
|
70
|
+
NumOfPoints: 37
|
71
|
+
0 S 1 33 968 S 1 33 454 S 1 33 1 0 0 S 1 33 956 S 1 33 454 S 1 33 1 0 0 S 1 33 894 S 1 33 454 S 1 33 1 0 0 S 1 33 762 S 1 33 454 S 1 33 1 0 0 S 1 33 540 S 1 33 476 S 1 33 1 0 0 S 1 33 354 S 1 33 510 S 1 33 1 0 0 S 1 33 252 S 1 33 532 S 1 33 1 0 0 S 1 33 204 S 1 33 540 S 1 33 1 0 0 S 1 33 168 S 1 33 546 S 1 33 1 0 0 S 1 33 152 S 1 33 546 S 1 33 1 0 0 S 1 33 152 S 1 33 540 S 1 33 1 0 0 S 1 33 170 S 1 33 526 S 1 33 1 0 0 S 1 33 210 S 1 33 516 S 1 33 1 0 0 S 1 33 260 S 1 33 512 S 1 33 1 0 0 S 1 33 312 S 1 33 516 S 1 33 1 0 0 S 1 33 372 S 1 33 562 S 1 33 1 0 0 S 1 33 438 S 1 33 600 S 1 33 1 0 0 S 1 33 518 S 1 33 648 S 1 33 1 0 0 S 1 33 600 S 1 33 688 S 1 33 1 0 0 S 1 33 710 S 1 33 732 S 1 33 1 0 0 S 1 33 800 S 1 33 754 S 1 33 1 0 0 S 1 33 842 S 1 33 760 S 1 33 1 0 0 S 1 33 888 S 1 33 760 S 1 33 1 0 0 S 1 33 918 S 1 33 760 S 1 33 1 0 0 S 1 33 954 S 1 33 696 S 1 33 1 0 0 S 1 33 996 S 1 33 498 S 1 33 1 0 0 S 1 33 1002 S 1 33 300 S 1 33 1 0 0 S 1 33 1002 S 1 33 36 S 1 33 1 0 0 S 1 33 960 S 1 33 -132 S 1 33 1 0 0 S 1 33 932 S 1 33 -208 S 1 33 1 0 0 S 1 33 914 S 1 33 -252 S 1 33 1 0 0 S 1 33 908 S 1 33 -260 S 1 33 1 0 0 S 1 33 902 S 1 33 -246 S 1 33 1 0 0 S 1 33 896 S 1 33 -150 S 1 33 1 0 0 S 1 33 890 S 1 33 64 S 1 33 1 0 0 S 1 33 890 S 1 33 300 S 1 33 1 0 0 S 1 33 900 S 1 33 498 S 1 33 1 0
|
72
|
+
NumOfAttributes: 46
|
73
|
+
"vis" S 0 1 "r" S 0 1 "g" S 0 1 "b" S 0 1 "a" S 0 1 "ro" S 0 1 "go" S 0 1 "bo" S 0 1 "ao" S 0 1 "opc" S 0 1 "bs" S 0 25 "bsp" S 0 0.05 "h" S 0 0.2 "bm" S 0 0 "dt" S 0 1 "ds" S 0 0 "dh" S 0 0 "bt" S 0 0 "bu" S 0 1 "inv" S 0 0 "src" S 0 0 "stx" S 0 0 "sty" S 0 0 "str" S 0 0 "sr" S 0 0 "ssx" S 0 1 "ssy" S 0 1 "ss" S 0 0 "spx" S 0 1024 "spy" S 0 778 "stot" S 0 0 "sto" S 0 0 "sv" S 0 0 "sf" S 0 1 "sb" S 0 1 "ltn" S 0 33 "ltm" S 0 33 "ltt" S 0 2 "ws" S 0 0 "we" S 0 1 "ep1" S 0 0 "ep2" S 0 0 "ep3" S 0 0 "tt" S 0 14 "nv" S 0 1 "view1" S 0 1
|
74
|
+
}
|
75
|
+
}
|
76
|
+
NumOfChildren: 0
|
77
|
+
}
|
78
|
+
Node: {
|
79
|
+
NodeName: "Brush1" {
|
80
|
+
Flag: 512
|
81
|
+
NodeType: 5
|
82
|
+
CubicCurve: "" {
|
83
|
+
Transform: 0 0 S 1 33 0 S 1 33 0 S 1 33 0 S 1 33 1 S 1 33 1 S 1 33 0 S 1 33 730.692 S 1 33 712.038
|
84
|
+
Type: 3 Flag: 2080 Dim: 3
|
85
|
+
NumOfPoints: 52
|
86
|
+
0 S 1 33 446 S 1 33 1062 S 1 33 1 0 0 S 1 33 456 S 1 33 1068 S 1 33 1 0 0 S 1 33 480 S 1 33 1080 S 1 33 1 0 0 S 1 33 542 S 1 33 1116 S 1 33 1 0 0 S 1 33 632 S 1 33 1152 S 1 33 1 0 0 S 1 33 684 S 1 33 1170 S 1 33 1 0 0 S 1 33 714 S 1 33 1180 S 1 33 1 0 0 S 1 33 738 S 1 33 1186 S 1 33 1 0 0 S 1 33 744 S 1 33 1186 S 1 33 1 0 0 S 1 33 746 S 1 33 1186 S 1 33 1 0 0 S 1 33 746 S 1 33 1176 S 1 33 1 0 0 S 1 33 746 S 1 33 1104 S 1 33 1 0 0 S 1 33 728 S 1 33 960 S 1 33 1 0 0 S 1 33 666 S 1 33 808 S 1 33 1 0 0 S 1 33 620 S 1 33 690 S 1 33 1 0 0 S 1 33 600 S 1 33 640 S 1 33 1 0 0 S 1 33 582 S 1 33 600 S 1 33 1 0 0 S 1 33 572 S 1 33 588 S 1 33 1 0 0 S 1 33 584 S 1 33 606 S 1 33 1 0 0 S 1 33 666 S 1 33 702 S 1 33 1 0 0 S 1 33 744 S 1 33 796 S 1 33 1 0 0 S 1 33 810 S 1 33 874 S 1 33 1 0 0 S 1 33 842 S 1 33 916 S 1 33 1 0 0 S 1 33 866 S 1 33 942 S 1 33 1 0 0 S 1 33 872 S 1 33 948 S 1 33 1 0 0 S 1 33 876 S 1 33 948 S 1 33 1 0 0 S 1 33 876 S 1 33 892 S 1 33 1 0 0 S 1 33 800 S 1 33 714 S 1 33 1 0 0 S 1 33 684 S 1 33 476 S 1 33 1 0 0 S 1 33 648 S 1 33 408 S 1 33 1 0 0 S 1 33 618 S 1 33 346 S 1 33 1 0 0 S 1 33 606 S 1 33 320 S 1 33 1 0 0 S 1 33 636 S 1 33 366 S 1 33 1 0 0 S 1 33 656 S 1 33 394 S 1 33 1 0 0 S 1 33 746 S 1 33 528 S 1 33 1 0 0 S 1 33 824 S 1 33 630 S 1 33 1 0 0 S 1 33 872 S 1 33 690 S 1 33 1 0 0 S 1 33 902 S 1 33 724 S 1 33 1 0 0 S 1 33 914 S 1 33 730 S 1 33 1 0 0 S 1 33 918 S 1 33 726 S 1 33 1 0 0 S 1 33 918 S 1 33 654 S 1 33 1 0 0 S 1 33 848 S 1 33 476 S 1 33 1 0 0 S 1 33 788 S 1 33 378 S 1 33 1 0 0 S 1 33 762 S 1 33 330 S 1 33 1 0 0 S 1 33 750 S 1 33 306 S 1 33 1 0 0 S 1 33 746 S 1 33 300 S 1 33 1 0 0 S 1 33 750 S 1 33 300 S 1 33 1 0 0 S 1 33 770 S 1 33 316 S 1 33 1 0 0 S 1 33 798 S 1 33 328 S 1 33 1 0 0 S 1 33 812 S 1 33 334 S 1 33 1 0 0 S 1 33 824 S 1 33 336 S 1 33 1 0 0 S 1 33 828 S 1 33 340 S 1 33 1 0
|
87
|
+
NumOfAttributes: 46
|
88
|
+
"vis" S 0 1 "r" S 0 1 "g" S 0 1 "b" S 0 1 "a" S 0 1 "ro" S 0 1 "go" S 0 1 "bo" S 0 1 "ao" S 0 1 "opc" S 0 1 "bs" S 0 25 "bsp" S 0 0.05 "h" S 0 0.2 "bm" S 0 0 "dt" S 0 1 "ds" S 0 0 "dh" S 0 0 "bt" S 0 0 "bu" S 0 1 "inv" S 0 0 "src" S 0 0 "stx" S 0 0 "sty" S 0 0 "str" S 0 0 "sr" S 0 0 "ssx" S 0 1 "ssy" S 0 1 "ss" S 0 0 "spx" S 0 1024 "spy" S 0 778 "stot" S 0 0 "sto" S 0 0 "sv" S 0 0 "sf" S 0 1 "sb" S 0 1 "ltn" S 0 33 "ltm" S 0 33 "ltt" S 0 2 "ws" S 0 0 "we" S 0 1 "ep1" S 0 0 "ep2" S 0 0 "ep3" S 0 0 "tt" S 0 14 "nv" S 0 1 "view1" S 0 1
|
89
|
+
}
|
90
|
+
}
|
91
|
+
NumOfChildren: 0
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}
|
96
|
+
toolbox {selectAll {
|
97
|
+
{ selectAll ssx 1 ssy 1 sf 1 }
|
98
|
+
{ createBezier ssx 1 ssy 1 sf 1 sb 1 tt 4 }
|
99
|
+
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
|
100
|
+
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
|
101
|
+
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 }
|
102
|
+
{ brush ssx 1 ssy 1 sf 1 sb 1 ltn 33 ltm 33 tt 14 }
|
103
|
+
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
|
104
|
+
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
|
105
|
+
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
|
106
|
+
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
|
107
|
+
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
|
108
|
+
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
|
109
|
+
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
|
110
|
+
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
|
111
|
+
} }
|
112
|
+
toolbar_brush_hardness 0.200000003
|
113
|
+
toolbar_lifetime_type all
|
114
|
+
toolbar_source_transform_scale {1 1}
|
115
|
+
toolbar_source_transform_center {320 240}
|
116
|
+
colorOverlay 0
|
117
|
+
lifetime_type "all frames"
|
118
|
+
lifetime_start 33
|
119
|
+
lifetime_end 33
|
120
|
+
motionblur_shutter_offset_type centred
|
121
|
+
brush_spacing 0.05000000075
|
122
|
+
brush_hardness 0.200000003
|
123
|
+
source_black_outside true
|
124
|
+
createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
|
125
|
+
name RotoPaint1
|
126
|
+
selected true
|
127
|
+
xpos -212
|
128
|
+
ypos -48
|
129
|
+
}
|
130
|
+
Blur {
|
131
|
+
size {{curve i x1 0 x20 1.7 x33 3.9}}
|
132
|
+
name Blur1
|
133
|
+
label "With \"Escapes\""
|
134
|
+
selected true
|
135
|
+
xpos -212
|
136
|
+
ypos -24
|
137
|
+
}
|